iobroker.alias-workbench 0.10.0 → 0.12.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 (54) hide show
  1. package/README.md +58 -98
  2. package/admin/css/werkbank.css +88 -0
  3. package/admin/i18n/de.json +766 -1
  4. package/admin/i18n/en.json +766 -1
  5. package/admin/i18n/es.json +766 -1
  6. package/admin/i18n/fr.json +766 -1
  7. package/admin/i18n/it.json +766 -1
  8. package/admin/i18n/nl.json +766 -1
  9. package/admin/i18n/pl.json +766 -1
  10. package/admin/i18n/pt.json +766 -1
  11. package/admin/i18n/ru.json +766 -1
  12. package/admin/i18n/uk.json +766 -1
  13. package/admin/i18n/zh-cn.json +766 -1
  14. package/admin/js/ablage.js +118 -0
  15. package/admin/js/attrappe.js +749 -0
  16. package/admin/js/baum.js +52 -5
  17. package/admin/js/detail.js +64 -3
  18. package/admin/js/entwurf.js +246 -31
  19. package/admin/js/ergebnis.js +77 -2
  20. package/admin/js/katalog.js +235 -40
  21. package/admin/js/mqtt.js +297 -27
  22. package/admin/js/musternamen.js +70 -26
  23. package/admin/js/objekte.js +2 -0
  24. package/admin/js/quellentausch.js +823 -16
  25. package/admin/js/schreiben.js +3 -2
  26. package/admin/js/sprache.js +11 -8
  27. package/admin/js/vorlagen.js +8 -3
  28. package/admin/js/vorlagenblatt.js +228 -64
  29. package/admin/js/werte.js +294 -5
  30. package/admin/js/zielleiste.js +19 -10
  31. package/admin/js/zuordnung.js +8 -7
  32. package/admin/js/zustand.js +32 -0
  33. package/admin/js/zustandsliste.js +9 -2
  34. package/admin/tab.html +24 -0
  35. package/admin/vorlagen/hm-dimmer.json +32 -8
  36. package/admin/vorlagen/hm-fensterkontakt-hm.json +20 -5
  37. package/admin/vorlagen/hm-fensterkontakt-hmip.json +28 -7
  38. package/admin/vorlagen/hm-heizgruppe.json +38 -11
  39. package/admin/vorlagen/hm-heizkoerper.json +42 -12
  40. package/admin/vorlagen/hm-rollladen.json +28 -7
  41. package/admin/vorlagen/hm-schaltaktor-lampe.json +24 -6
  42. package/admin/vorlagen/hm-schaltaktor-mehrfach.json +32 -8
  43. package/admin/vorlagen/hm-schaltaktor-steckdose.json +24 -6
  44. package/admin/vorlagen/hm-temperatur-feuchte.json +8 -2
  45. package/admin/vorlagen/hm-wandthermostat.json +36 -9
  46. package/admin/vorlagen/messpunkt.json +40 -10
  47. package/admin/vorlagen/tasmota-lampe.json +48 -12
  48. package/admin/vorlagen/tasmota-mehrfach.json +40 -10
  49. package/admin/vorlagen/tasmota-rgb.json +36 -9
  50. package/admin/vorlagen/tasmota-steckdose.json +56 -14
  51. package/io-package.json +41 -28
  52. package/package.json +3 -3
  53. package/admin/sprachen/de.json +0 -685
  54. package/admin/sprachen/en.json +0 -685
@@ -10,5 +10,770 @@
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.": "Admin 的设置向导会在图标字段里留下诸如 \"Playroom\" 这样的裸名称,它已无法解析为图片,显示为一个破损的方框。开启此项后,工作台会将其替换。这会覆盖一个非空字段——试运行会明确指出这一点。",
11
11
  "The Alias Workbench has no running process — everything happens in the Admin tab. These settings control how it writes.": "别名工作台没有运行中的进程——一切都在 Admin 选项卡中进行。这些设置决定它如何写入。",
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.": "工作台在运行时从 Admin 自身的打包文件中读取,而不是保留一份每次更新都会过时的副本。若读取失败,选择列表只显示已有内容——这不是错误,只是选项更少。",
13
- "Where the templates come from": "模板来自何处"
13
+ "Where the templates come from": "模板来自何处",
14
+ "app.connected": "已连接",
15
+ "app.detector": "类型检测器",
16
+ "app.disconnected": "断开连接",
17
+ "app.objectsCount": "{0} 个对象",
18
+ "app.patternsCount": "{0} 种模式",
19
+ "app.subsCount": "{0} 订阅",
20
+ "app.subsCount1": "一项订阅",
21
+ "app.subsHint": "订阅涵盖的是整个分支,而非单一值——一个带星号的模式会捕获其下方的所有节点。切换节点会取消对所有先前节点的订阅;如果节点数量持续增加,就会有某个节点被遗漏。当前正在监视:",
22
+ "app.templatesCount": "{0} 个模板",
23
+ "app.title": "Alias Workbench",
24
+ "catalog.loadingText": "有一次在完成一次管理员更新后——该软件包大小为几兆字节。之后,目录会被存储起来,且不会再次被获取。",
25
+ "catalog.loadingTitle": "获取管理员模板",
26
+ "catalog.missing": "管理员目录不可用——仅显示现有条目",
27
+ "check.allDeliver": "全部送达",
28
+ "check.allFine": "一切正常",
29
+ "check.allOk": "{0} ✓",
30
+ "check.button": "支票",
31
+ "check.canSend": "{0} 写入路径正常",
32
+ "check.cannotSend": "无法发送:{0}",
33
+ "check.checked": "{0} 已勾选",
34
+ "check.duplicate": "不重复计分",
35
+ "check.duplicateNone": "每个都指向别处",
36
+ "check.duplicateSome": "指向同一事物:{0}",
37
+ "check.feedback": "反馈会立即收到",
38
+ "check.feedbackFast": "随即,SetOption59 被启用",
39
+ "check.feedbackNone": "未影响任何行 — 所有数据均从 stat/… 读取",
40
+ "check.feedbackSlow": "延迟:{0}",
41
+ "check.feedbackUnknown": "未勾选:{0}",
42
+ "check.formulaYields": "读取公式后得到某种结果",
43
+ "check.hintCount": "注释:{0}",
44
+ "check.noPatternFits": "没有符合的模式",
45
+ "check.noWritePath": "no point 写道:",
46
+ "check.notMqtt": "没有 MQTT 写入路径",
47
+ "check.openCount": "{0} 打开",
48
+ "check.publish": "在 cmnd 点上发布",
49
+ "check.rolesMakeDevice": "角色构成了一个设备",
50
+ "check.sendPointMissing": "发送尚未创建的数据点:{0}",
51
+ "check.sendUnknown": "该对象中并未说明 {0} 是否可以发布消息——该主题仅位于 `native` 中。这对 ioBroker.mqtt 和 sonoff 来说是正常的。",
52
+ "check.sourceExists": "源文件存在",
53
+ "check.sourceHasValue": "源具有一个值",
54
+ "check.targetCan": "目标能够完成所要求的工作",
55
+ "check.targetCanFine": "一切都好",
56
+ "check.targetNoWrite": "{0}:目标不可写",
57
+ "check.targetVoidFormula": "{0}:写入公式时未遇到任何内容,目标是 {1}",
58
+ "check.title": "检查——始终在运行,从不触碰任何东西",
59
+ "del.allOutputs": "删除该设备的全部 {0} 个输出",
60
+ "del.allOutputsHint": "否则,其余的就会被抛在后面,沦为孤儿:{0}",
61
+ "del.alsoFunction": "与该别名一同创建的函数“{0}”也会被删除——否则该函数将保持为空。",
62
+ "del.alsoRoom": "与该别名一同创建的房间“{0}”也会被删除——否则该房间将处于空置状态。",
63
+ "del.button": "删除别名……",
64
+ "del.channelsBelow": "请注意:其下方的 {0} 个自有频道也将被删除。",
65
+ "del.count": "将删除以下对象:{0}",
66
+ "del.done": "已删除:{0} 个对象。",
67
+ "del.hint": "该别名及其下方的所有数据点均被删除。源数据保持不变——仅删除外壳,不影响设备本身。此操作无法撤销。",
68
+ "del.now": "彻底删除",
69
+ "del.objects": "消失了什么",
70
+ "del.scriptsHead": "有 {0} 个脚本提到了此 ID:",
71
+ "del.scriptsHead1": "有一个脚本提到了这个ID:",
72
+ "del.scriptsHint": "仅对 JavaScript 适配器的脚本进行了搜索,且以纯文本形式进行。vis 视图、场景以及其他适配器的设置均未包含在内。",
73
+ "del.title": "删除别名",
74
+ "detail.aliasEmpty": "该别名会将此字段留空。",
75
+ "detail.aliasHas": "该别名包含:",
76
+ "detail.asDelivered": "按交付状态",
77
+ "detail.attention": "注意",
78
+ "detail.buttonNoRead": "无阅读源按钮——不随文本同步阅读",
79
+ "detail.caption": "图注",
80
+ "detail.captionHint": "成为该状态的显示名称——在管理后台、VIS 以及所有使用名称而非 ID 的地方都会显示该名称",
81
+ "detail.converted": "由别名转换",
82
+ "detail.datapoint": "数据点",
83
+ "detail.decimals": "小数",
84
+ "detail.display": "显示",
85
+ "detail.elsewhere": "(其他地方)",
86
+ "detail.expects": "预计 {0}",
87
+ "detail.formula": "读取公式",
88
+ "detail.formulaBroken": "公式有误",
89
+ "detail.formulaHint": "“ON”/“OFF” → 布尔值由别名本身决定,无需公式。",
90
+ "detail.formulaPlaceholder": "empty = 取该值且不作更改",
91
+ "detail.formulaThrows": "公式抛出异常:{0}",
92
+ "detail.formulaTooSlow": "该公式耗时 {0} 毫秒,目前不再执行。重新加载该标签页可再次尝试执行。",
93
+ "detail.jsonField": "JSON 中的字段",
94
+ "detail.matchesState": "✓ 与状态匹配",
95
+ "detail.name": "姓名",
96
+ "detail.namePlaceholder": "例如:UNREACH",
97
+ "detail.nameTaken": "另一行已经包含名称 {0}。",
98
+ "detail.noSource": "— 来源不详 —",
99
+ "detail.noValue": "无值",
100
+ "detail.noWrite": "— 请勿书写 —",
101
+ "detail.notWritable": "不可写",
102
+ "detail.objectId": "对象 ID",
103
+ "detail.otherObject": "……输入另一个对象",
104
+ "detail.ownFormula": "自己的配方",
105
+ "detail.pickOne": "— 请选择 —",
106
+ "detail.rawNothing": "— 该来源没有任何内容 ——",
107
+ "detail.rawValue": "原始值",
108
+ "detail.readIsButton": "按钮",
109
+ "detail.readIsButtonHint": "带有写入目标的角色按钮:别名数据点读取值为 false,vis、Alexa 和 Matter 将其渲染为按钮。读取源不会造成任何影响——有了它,别名就能检测到每次按下操作,包括对物理按钮的按下。按下后,最后一个值会保留下来,就像在源上一样。",
110
+ "detail.readOnlySlotWrites": "在该模式下,{0} 为只读——“写入”应改为“——请勿写入——”,否则写入的值将被发送到设备。",
111
+ "detail.readsFrom": "读取自",
112
+ "detail.removePoint": "删除此项",
113
+ "detail.role": "角色",
114
+ "detail.sameAsRead": "— 与所读内容相同 —",
115
+ "detail.separateHint": "从与写入位置不同的位置读取:显示的内容是设备反馈的信息——而非最后发送的命令。",
116
+ "detail.slot": "按图案排列",
117
+ "detail.slotHint": "根据该位置的模式规定,设置角色、类型、单位和值列表。数据点和名称保持不变。",
118
+ "detail.slotNone": "— 无处 —",
119
+ "detail.slotNotGiven": "{0} 已被选中但未被赋值——关于不符合条件的内容(通常是类型),请参见“角色”。",
120
+ "detail.slotRequired": "必填",
121
+ "detail.sourceGone": "源不存在",
122
+ "detail.stateSays": "状态显示为 {0}",
123
+ "detail.states": "值列表",
124
+ "detail.statesFromSource": "从源中提取 {0} 条记录",
125
+ "detail.statesHint": "将数字转换为文本——管理员随后会显示下拉菜单而非数字输入框,且某些模式槽位需要此功能。若不需显示值列表,请留空。",
126
+ "detail.statesPlaceholder": "每行一个:0 = 关闭",
127
+ "detail.takeFromAlias": "从存储的别名中检索出这个值",
128
+ "detail.takeOne": "从模板中提取这个值",
129
+ "detail.targetNoWrite": "目标点携带 write: false —— 其适配器不会将任何内容传递给设备。ioBroker 仍会存储该值,但不会触发任何操作。",
130
+ "detail.targetTypeHint": "目标点的类型为 {0}。它决定了写入表达式中哪些部分会被保留:mixed 和 string 类型会保留文本,boolean 和 number 类型则会将其转换回原始类型。",
131
+ "detail.targetTypeVoid": "目标是 {0},且不接受任何文本。写入公式确实会生成文本——但 js-controller 在写入时会将其转换回 {0},因此该公式不起作用。切换功能仍然有效。",
132
+ "detail.tplWants": "该模板需要:",
133
+ "detail.tplWantsEmpty": "该模板将此字段留空。",
134
+ "detail.type": "类型",
135
+ "detail.typeNumber": "数字",
136
+ "detail.unit": "单位",
137
+ "detail.writeFormula": "输入公式",
138
+ "detail.writeFormulaHint": "反向转换:设备在切换时应接收的内容。",
139
+ "detail.writeFormulaPlaceholder": "例如:val ? \"ON\" : \"OFF\"",
140
+ "detail.writesTo": "写信给",
141
+ "detail.yields": "产量",
142
+ "detail.yieldsNothing": "一无所获",
143
+ "diff.addedNoPlace": "此外还勾选了——不属于 {0} 的一部分",
144
+ "diff.addedWithPlace": "此外还勾选了——属于 {0} 的一部分",
145
+ "diff.againstStored": "与存储的内容相比",
146
+ "diff.changes": "变更",
147
+ "diff.deselectedNoPlace": "未勾选 — 反正本来就不会是 {0} 的一部分",
148
+ "diff.deselectedWithPlace": "未勾选 — 属于 {0} 的一部分",
149
+ "diff.deviations": "与提案的偏差",
150
+ "diff.formulaChange": "读取公式:{0} → {1}",
151
+ "diff.newByHand": "新内容,手动添加",
152
+ "diff.noName": "(无名)",
153
+ "diff.nothingExists": "这些目前都不存在",
154
+ "diff.open": "{0} 打开",
155
+ "diff.points": "{0} 分",
156
+ "diff.roleChange": "角色:{0} → {1}",
157
+ "diff.sourceChange": "来源:{0} → {1}",
158
+ "diff.unitChange": "单位:{0} → {1}",
159
+ "diff.wouldBeAdded": "已勾选 — 更新时将添加",
160
+ "diff.wouldBeRemoved": "已取消选中 — 该项存在于别名中,将被删除",
161
+ "enums.addTo": "放进去",
162
+ "enums.alsoFolder": "是否也要将别名存储在“{0}”下?",
163
+ "enums.clear": "取消分配",
164
+ "enums.function": "功能",
165
+ "enums.functionHint": "将别名分配给某个函数,例如“照明”或“供暖”。该别名同样存储在枚举中,而非对象上。",
166
+ "enums.iconAdded": "将添加图标",
167
+ "enums.iconNew": "暂无图片——工作台会在撰写时添加",
168
+ "enums.iconNewMark": "新",
169
+ "enums.iconThere": "图片已保存",
170
+ "enums.members": "里面有{0}",
171
+ "enums.newSuffix": "新",
172
+ "enums.noMatch": "未找到“{0}”的相关内容",
173
+ "enums.notLoadedField": "无法加载房间和功能——因此不会写入房间和功能;但别名本身仍会被创建。工作台会自动重试三次,否则请重新加载该选项卡。",
174
+ "enums.nowEmpty": "之后该字段将为空,并将被删除",
175
+ "enums.placeholder": "空 = 未赋值",
176
+ "enums.removeFrom": "被取出",
177
+ "enums.room": "房间",
178
+ "enums.roomHint": "将别名分配给一个房间。该别名并非存储在对象上,而是存储在“enum.rooms”枚举中——Alexa、Google 和仪表盘均以此为依据进行分组。",
179
+ "enums.suggested": "建议",
180
+ "enums.unknown": "未加载枚举——房间和功能保持不变。",
181
+ "enums.unused": "空",
182
+ "enums.willCreate": "创建新",
183
+ "folder.aliasMissing": "缺失",
184
+ "folder.aliasThere": "存在",
185
+ "folder.clickHint": "点击某台设备以对其进行操作。",
186
+ "folder.clickHintText": "一旦有模板与某个节点匹配,该节点即被视为一个设备——在此之前不会进行任何搜索。如果没有匹配项,只要该节点拥有自己的数据点,它仍会出现在列表中。",
187
+ "folder.colAlias": "别名",
188
+ "folder.colDetected": "被检测为",
189
+ "folder.colSource": "来源",
190
+ "folder.devices": "设备",
191
+ "folder.devicesBelow": "下方有 {0} 台设备 · {1} 个数据点",
192
+ "folder.found": "{0} 条结果",
193
+ "folder.nothingHere": "这里没有任何东西能变成一种装置。",
194
+ "folder.withAlias": "{0} 带别名",
195
+ "folder.withoutTemplate": "{0} 无模板",
196
+ "guess.alsoRow": "附建议:适合",
197
+ "guess.bar": "{0} 个插槽已被猜中——请核对",
198
+ "guess.better": "{0} 可能更合适",
199
+ "guess.betterGoHint": "切换到 {0} 并立即按下“{1}”。随后,每项分配都会显示为“猜测”,需要逐一核对;仍可进行剔除操作。设备上的内容不会发生任何变化——仅在草稿中设置了角色。",
200
+ "guess.betterHint": "{0} 将达到 {1} 个已填满的槽位,{2} 仅达到 {3} 个——这两个数字均在建议后得出。切换到该选项,然后点击“建议空闲槽位”;每次分配都需要进行核对。",
201
+ "guess.betterHintNone": "{0} 在建议后将达到 {1} 个已填满的槽位;{2} 即使到那时也无法放入。切换到它,然后点击“建议空槽位”;每次分配都需要检查。",
202
+ "guess.button": "推荐免费老虎机",
203
+ "guess.drop": "丢弃",
204
+ "guess.hint": "利用剩余的数据点填充模式中的空缺——这只是尝试,并非确切知晓。根据名称、值列表、单位和类型进行推测;每次赋值都会标记为“推测”,并可逐一舍弃。",
205
+ "guess.keep": "保留",
206
+ "guess.keepAll": "全部保留",
207
+ "guess.locked": "{0}× 已猜测,尚未决定——先选择保留(✓)或舍弃(✕),然后才能创建并保存解锁。",
208
+ "guess.mark": "猜到",
209
+ "guess.noneFit": "{0} 保持为空。没有剩余的数据点符合条件——根据名称、值列表、单位和类型进行匹配,但没有任何一项达到阈值。",
210
+ "guess.noneFull": "图案的每个位置都已填满——再也没有什么可暗示的了。",
211
+ "guess.noneHand": "有 {0} 行是人工决定的,因此保持原样:{1}。",
212
+ "guess.noneHandOne": "{0} 由人工决定,因此保持原样。",
213
+ "guess.noneUsed": "{0} 保持空闲。每个剩余的数据点在已填满的行中都已作为读取或写入源。",
214
+ "guess.slotsMore": "还有 {0} 和 {1} 个",
215
+ "guess.tplAsk": "该设备被标识为“{0}”,因此分配已确定。该建议是根据剩余的数据点填充其他字段——这只是尝试,并非确切信息,且每项匹配都需要核对。此功能适用于特殊情况,例如当设备的功能超出模板所涵盖的范围时。",
216
+ "guess.tplGo": "还是提个建议吧",
217
+ "guess.tplHint": "该模板已涵盖此设备——此处的建议仅适用于特殊情况。",
218
+ "guess.tplTitle": "尽管有模板,还是建议使用免费插槽吗?",
219
+ "guess.undo": "忽略建议",
220
+ "help.aliases": "在左侧选择一个现有的别名。删除数据点、更改角色、数据源和公式——或者移动、重命名或删除它。",
221
+ "help.aliasesAdd": "要为别名添加数据点,通过“转到源 →”(右上角,别名名称旁边)的方式更简单:该处会应用模板,且设备的每个数据点都会附带一个现成的角色——而在这里,您则需要手动输入每个数据点。",
222
+ "help.sources": "在左侧选择一个设备或通道。工作台会识别其类型,并建议一个完整的别名。如果该设备或通道已有别名,则会对其进行更新。",
223
+ "help.templates": "在左侧选择一个模板。内置模板可以预览和复制,自定义模板则可进行编辑。试用功能会显示该模板适用于哪些设备。",
224
+ "info.dlgTitle": "不属于 {0} 模式",
225
+ "info.explain": "它们会完全正常地工作,并保留在您创建它们的位置。不会写入任何额外内容——别名保持原样。它们只是不属于 ioBroker 所认定的 {0} 范畴;其作用不符合该结构中的任何位置。 只有当你将别名传递给 Alexa、Google Home 或设备用户界面时,这才会产生影响:这些系统会看到一个不包含这些数据点的 {0}。在 VIS、脚本和历史记录中,你可以像使用其他数据点一样使用它们。",
226
+ "info.more": "这意味着什么",
227
+ "leave.body": "{0} 上还有一些尚未写入的更改。现在切换会丢弃这些更改。",
228
+ "leave.discard": "弃牌并换牌",
229
+ "leave.stay": "住在这里",
230
+ "leave.title": "未保存的更改",
231
+ "list.addByHand": "手动添加数据点",
232
+ "list.aliasDiffers": "与存储的别名不同",
233
+ "list.all": "所有",
234
+ "list.buttonOnly": "仅写入",
235
+ "list.byHand": "手工",
236
+ "list.changed": "已更改",
237
+ "list.colOn": "在……上",
238
+ "list.colRole": "角色",
239
+ "list.colState": "州",
240
+ "list.colValue": "值",
241
+ "list.countOf": "{0} 共 {1} 条",
242
+ "list.createAria": "创建 {0}",
243
+ "list.nameMissing": "名称缺失",
244
+ "list.newPoint": "新要点",
245
+ "list.noRole": "— 无角色 —",
246
+ "list.ofDatapoints": "数据点",
247
+ "list.onlyPattern": "仅符合该模式的内容",
248
+ "list.onlyPatternHint": "仅勾选选定图案中会占据位置的点——其余部分均未勾选,也不会被生成。",
249
+ "list.onlyWithValue": "仅当值为",
250
+ "list.otherSource": "来自 {0}",
251
+ "list.otherSourceHint": "该点不是从 {0} 读取,而是从 {1} 读取。",
252
+ "list.reset": "重置",
253
+ "list.resetHint": "将此处所做的所有更改(复选框、角色、公式、数据源)全部撤销,并再次显示已保存的状态。",
254
+ "list.sendPointMissing": "发送尚未创建的数据点",
255
+ "list.sourceGone": "源不存在",
256
+ "list.sourceHint": "该点从 {0} 开始读取。",
257
+ "list.sourceMissing": "来源缺失",
258
+ "list.tpl": "模板",
259
+ "list.tplDiffers": "与模板不同",
260
+ "list.tplHint": "会精确检查模板中提出的各项内容——无论该别名当前包含什么内容。",
261
+ "list.willBeCreated": "将创建:",
262
+ "mock.colName": "名称",
263
+ "mock.colPath": "路径",
264
+ "mock.colRole": "角色",
265
+ "mock.colType": "类型",
266
+ "mock.colValue": "值",
267
+ "mock.counts": "{0} 个条目,{1} 个带值 · 由 alias-workbench {2} 写入 · 来源 {3}",
268
+ "mock.inNames": "注意:有 {0} 处标识同时出现在路径或名称中——不含 native 并不会去掉它们",
269
+ "mock.more": "… 还有 {0} 个条目(未显示,但会写入文件)",
270
+ "mock.noNative": "不包含 native。不想随文件外传的值,取消勾选即可。",
271
+ "mock.save": "保存文件",
272
+ "mock.suspicious": "看起来像:{0}",
273
+ "mock.tooBig": "这有点多:{0} 个条目(一台设备通常少于 {1} 个)",
274
+ "mock.tooBigHint": "是想导出单台设备吗?仍然可以继续导出。",
275
+ "mockin.bad": "这个文件不合适",
276
+ "mockin.badEntry": "有 {0} 个条目没有路径。",
277
+ "mockin.badFormat": "格式为 {0},但此版本读取 {1}。",
278
+ "mockin.badJson": "无法作为 JSON 读取。",
279
+ "mockin.badObjects": "文件中没有对象。",
280
+ "mockin.counts": "{0} 个对象,{1} 个带值,{2} 个已存在",
281
+ "mockin.create": "立即创建",
282
+ "mockin.exists": "(已存在)",
283
+ "mockin.from": "来自 {0} · 由 alias-workbench {1} 写入 · 来源 {2}",
284
+ "mockin.name": "名称",
285
+ "mockin.nameTaken": "名称「{0}」已存在——那里已有 {1} 个对象",
286
+ "mockin.nameTakenHint": "请换一个名称。写入已有的模拟设备会把两者混在一起:只有路径相同的会被替换,旧的其余部分仍在——结果会是一台从未存在过的设备。",
287
+ "mockin.noRoot": "缺少根条目。",
288
+ "move.button": "移动……",
289
+ "move.done": "已移动。该别名现位于 {0}。",
290
+ "move.exists": "{0} 已存在。请先将其删除,或选择另一个名称。",
291
+ "move.from": "来自",
292
+ "move.needName": "必须填写姓名。",
293
+ "move.nested": "目标位于别名下方(或者反过来)。移动它会删除其父节点——请选择它旁边的位置。",
294
+ "move.newFolder": "新文件夹",
295
+ "move.noFolder": "(无文件夹——位于 alias.0 文件下方)",
296
+ "move.noScripts": "该 ID 未出现在任何脚本中。",
297
+ "move.now": "立即行动",
298
+ "move.scriptLines": "行 {0}",
299
+ "move.scriptLinesN": "行 {0}",
300
+ "move.scriptOff": "已禁用",
301
+ "move.scriptsHead": "{0} 个脚本提到了旧的 ID:",
302
+ "move.scriptsHead1": "有一个脚本提到了旧的ID:",
303
+ "move.title": "移动别名",
304
+ "move.to": "到",
305
+ "move.unchanged": "文件夹和名称未更改——无需操作。",
306
+ "move.warnHistory": "只有“启用记录”这一设置会随之变更。从现在起,将在新 ID 下开始一个新的、空的系列。 迄今为止记录的所有内容仍保留在数据库的旧 ID 下——这些数据并未丢失,但此后将不再更新。指向旧 ID 的图表和 Grafana 查询将无法获取新数据;若指向新 ID,则会缺少历史数据。",
307
+ "move.warnHistoryHead": "记录的数值不会随时间变化。",
308
+ "move.warnRefs": "就视图、Alexa 和 Google 名称以及其他适配器而言,无法进行检查。任何指向旧 ID 的内容都必须手动调整。",
309
+ "move.warnRefsHead": "还有哪些内容涉及旧的ID?",
310
+ "move.willMove": "将被移走",
311
+ "move.with": "与",
312
+ "mq.andMore": "……以及另外 {0} 个",
313
+ "mq.ask": "询问设备",
314
+ "mq.askError": "查询失败:{0}",
315
+ "mq.askGotAnswer": "设备已响应——找到的命令:{0}",
316
+ "mq.askHint": "这是一个简单的查询——它不会切换任何内容,也不会更改任何设置。",
317
+ "mq.askNoAnswer": "没有响应。要么该设备处于离线状态,要么它监听的是另一个主题。",
318
+ "mq.askOffline": "该设备目前未发送数据——因此请求将得不到响应。",
319
+ "mq.askedDays": "{0}天前提问",
320
+ "mq.askedHours": "{0}小时前提问",
321
+ "mq.askedMinutes": "{0}分钟前提问",
322
+ "mq.asking": "询问设备",
323
+ "mq.commandsFrom": "从 {0} 读取命令",
324
+ "mq.createdBy": "由 Alias Workbench 创建",
325
+ "mq.dialogTitle": "创建发送点",
326
+ "mq.done": "已写入 {0} 个对象。",
327
+ "mq.doneHint": "检测功能稍后将再次运行——之前未匹配的模板现在可能会匹配。",
328
+ "mq.duplicate": "与 {0} 相同",
329
+ "mq.fix": "创建发送点……",
330
+ "mq.instant": "即时反馈",
331
+ "mq.instantCheck": "问",
332
+ "mq.instantChecking": "询问",
333
+ "mq.instantEnable": "启用",
334
+ "mq.instantEnabling": "启用",
335
+ "mq.instantHintOff": "如果不启用 SetOption59,设备仅在其遥测周期内报告数据。{0} 从 tele/… 读取数据,并在切换后一直显示旧值,直到下一次遥测周期。启用该选项是一项永久性设备设置——它不会切换任何功能,仅改变设备报告数据的频率。",
336
+ "mq.instantHintOffTakt": "如果不启用 SetOption59,设备仅每 {1} 秒报告一次。{0} 从 tele/… 读取数据,并在切换后一直显示旧值,直到该时间点为止。启用该选项是一项永久性设备设置——它不会切换任何功能,仅改变设备报告的频率。",
337
+ "mq.instantHintOn": "已设置 SetOption59:设备会立即报告每次变化,而不仅仅是在下一次遥测时报告。测量间隔为三秒。",
338
+ "mq.instantHintUnknown": "该设备尚未被“询问”。“询问”会向 SetOption59 发送一个空查询——这不会改变任何内容。",
339
+ "mq.instantOff": "关闭",
340
+ "mq.instantOffShort": "反馈延迟",
341
+ "mq.instantOn": "已启用",
342
+ "mq.instantUnknown": "未知",
343
+ "mq.intro": "并非每个 Tasmota 的配置都完全相同。缺少或禁用某个点本身并不算故障——只有当别名需要通过该点进行切换,或者模板需要该点进行检测时,这才会成为问题。",
344
+ "mq.justAsked": "刚刚问的",
345
+ "mq.missing": "{0} 缺少发送积分",
346
+ "mq.missingIp": "该设备的 IP 地址未知——它仅出现在 tele/INFO2(仅在启动时发送一次)或 stat/STATUS5(仅在请求时返回)中。",
347
+ "mq.missingPeriod": "遥测周期未知——该设备不会主动报告该信息,仅在收到请求时才会报告。",
348
+ "mq.mute": "{0} 无法发送",
349
+ "mq.neverReported": "该设备自启动以来尚未完全上报数据,因此其命令列表尚不清楚。",
350
+ "mq.newPoints": "待创建",
351
+ "mq.nothingYet": "该设备尚未发送任何可用于读取命令的数据。",
352
+ "mq.nowValue": "当前:",
353
+ "mq.offline": "离线",
354
+ "mq.onlyResult": "到目前为止,只收到了一条命令的响应,而非完整的状态——该列表可能并不完整。",
355
+ "mq.repair": "在场却沉默",
356
+ "mq.repairHint": "这些点虽然存在,但不允许发送。通过它们切换别名不会产生任何效果,且没有任何迹象表明发生了这种情况。",
357
+ "mq.rowAllow": "允许发送",
358
+ "mq.rowCreate": "创建",
359
+ "mq.rowWorking": "……",
360
+ "mq.selectedOf": "已选中 {0} 项,共 {1} 项",
361
+ "mq.silent": "未报告",
362
+ "mq.split": "来自 {0} 个分支",
363
+ "mq.splitHint": "该设备并非位于某个节点之下,而是分布在 {0} 个分支上——当设备的 FullTopic 为“%prefix%/%topic%/”(Tasmota 的出厂设置)时,MQTT 适配器便是按此方式存储该设备的。 工作台将这些分支视为一个设备;节点会创建在该设备下方,而非其旁边。",
364
+ "mq.stFine": "赠送,寄送",
365
+ "mq.stMissing": "漏了一个点",
366
+ "mq.stMute": "无法发送",
367
+ "mq.stOff": "在场,但已关闭",
368
+ "mq.stUnknown": "当前,发送未知",
369
+ "mq.title": "MQTT 设备",
370
+ "mq.unknownCommand": "未知命令",
371
+ "mq.write": "创建 ({0})",
372
+ "pattern.allPatterns": "所有 {0} 模式",
373
+ "pattern.doesNotFit": "✕ 不合适",
374
+ "pattern.expectsType": ", 预期 {0}",
375
+ "pattern.fitsNotType": "✕ {0}:请输入 {1} 而不是 {2}",
376
+ "pattern.fitsOn": "匹配项",
377
+ "pattern.freeSlots": "{0} 模式下的空位",
378
+ "pattern.label": "图案",
379
+ "pattern.manualInstead": "手动操作,而不是 {0}",
380
+ "pattern.missing": "缺少 {0}",
381
+ "pattern.noMatch": "没有模式与“{0}”匹配",
382
+ "pattern.noPlaceBecauseType": "{0} 模式目前不适用:{1} 需要 {2},但 {3} 已被设置。这就是为什么没有行拥有插槽。",
383
+ "pattern.noPlaceLegend": "像这样被阴影标出的行在 {0} 模式中没有槽位",
384
+ "pattern.noPlaceLong": "{0} 模式中没有插槽——该点仍会被创建且完全可用,只是 Alexa 和其相关服务会将其单独计数",
385
+ "pattern.notDetected": "未检测到",
386
+ "pattern.offCandidate": "{0} 符合 {1},但未被勾选。",
387
+ "pattern.offCandidateType": "{0} 根据其角色符合 {1} 的要求,但未被勾选,且类型为 {2} 而非 {3}。",
388
+ "pattern.offGuess": "使用“{0}”时,该规则将生效。",
389
+ "pattern.offMissing": "{0} 模式目前不适用:缺少 {1}。这就是为什么没有行包含该插槽的原因。",
390
+ "pattern.orRole": "或 {0}",
391
+ "pattern.pointsTaken": "✓ {0} 分",
392
+ "pattern.required": "必填 — 缺失",
393
+ "pattern.search": "输入内容进行搜索……",
394
+ "pattern.slotHeldBy": "{1} 已占用 {0} —— 这样一来,这一行就找不到位置了。请在上面的“按图案放置”下方选择一个空位。",
395
+ "pattern.slotName": "该数据点位于 {1} 模式的“{0}”插槽中。插槽名称来自类型检测器,在所有地方都保持一致——它们不会被转换,因为别名 datapoint 的名称正是如此。",
396
+ "pattern.slotsTaken": "✓ 已填入 {0}/{1}",
397
+ "pattern.tickIt": "勾选它",
398
+ "pattern.tickItType": "勾选它,{0}",
399
+ "pattern.toSlot": " → {1} 模式中的 {0} 位置",
400
+ "pattern.typeMismatch": "插槽 {0} 需要 {1},但 {2} 已被设置——尽管角色正确,该状态仍不符合模式。",
401
+ "pattern.typeOr": " 或",
402
+ "pattern.usualOnly": "仅限常规款",
403
+ "pattern.viaRole": "角色 {0}",
404
+ "result.addNeighbours": "加入相邻分支({0})",
405
+ "result.addNeighboursHint": "有些适配器把一个设备拆到并列分支里。此处会全部加入;要单独挑选,请在树中按住 Ctrl 单击。",
406
+ "result.addNeighboursSame": "按适配器的记录,这些分支属于同一台设备——相同的节点标识和相同的连接点。此处会全部加入;否则请按住 Ctrl 单击。",
407
+ "result.allAnyway": "反正都一样",
408
+ "result.channelsHint": "该设备有 {0} 个通道。请在以下选项中选择:将所有内容平铺到一个别名中,或者复制源结构——为该设备创建一个文件夹,并在其下方为每个通道分别创建一个子文件夹。",
409
+ "result.extraSwitches": "包含:来自其他通道的 {0} 个点,而 {1} 模式中没有对应的插槽。这些点虽然已创建,但不计入该设备的开关或反馈。如需单独控制,请使用下方的“每个通道一个设备”选项。",
410
+ "result.header": "类型检测器对此的解读",
411
+ "result.newlyCreated": "将被创建",
412
+ "result.noObjectShort": "无宾语",
413
+ "result.pickSource": "跳到哪里?",
414
+ "result.pointsFromBranches": "来自 {1} 个分支的 {0} 个数据点。",
415
+ "result.sourceCount": "{0} 来源",
416
+ "result.sourceCountHint": "该别名的条目来自多个节点。“前往来源”会引导至其中大部分条目的来源;点击后可查看所有条目。",
417
+ "result.sourceGone": "源 {0} 已不存在。",
418
+ "result.sourceGone1": "1分,毫无意义",
419
+ "result.sourceGoneN": "{0} 个点指向无处",
420
+ "result.states": "{0} 个州",
421
+ "result.statesDirect": "{0} 个州(其中 {1} 个州直接)",
422
+ "result.toAlias": "到别名",
423
+ "result.toAliasHint": "跳转到由该设备生成的别名。",
424
+ "result.toSource": "返回来源",
425
+ "result.toSourceHint": "跳转到生成此别名的源设备。模板仅在此处生效——在别名模式下,可以维护别名,但无法根据模板重新生成别名。",
426
+ "result.tooManyStates": "这将是一个具有 {0} 个状态的设备——通常这意味着选错了节点。在左侧的树形图中,看起来像单个设备的节点上标有一个圆点。你仍然可以按这种方式构建它。",
427
+ "roles.leadsTo": "→ 插槽 {0}",
428
+ "roles.noMatch": "未找到与“{0}”匹配的结果",
429
+ "roles.patternOnly": "仅显示该模式的角色",
430
+ "roles.search": "搜索职位……",
431
+ "roles.showAll": "显示所有 {0} 个角色",
432
+ "roles.slot": "{1} 模式中的 {0} 槽位",
433
+ "roles.slotFree": "免费",
434
+ "roles.slotTaken": "由 {0} 拍摄",
435
+ "swap.blocked": "首先做出决定——这些点无法同时存在:{0}。要么在交换过程中将其移除,要么保持交换状态不变;一个需要写入的点必须有一个写入目标。",
436
+ "swap.button": "交换源代码……",
437
+ "swap.byHandCheck": "公式、单位和取值范围保持别名上的原样——请事后核对。",
438
+ "swap.byHandHint": "这个数据点是你自己指定的——工作台无法从新设备推导出来。",
439
+ "swap.byHandMark": "手动",
440
+ "swap.diffRange": "范围 {0} → {1}",
441
+ "swap.diffType": "类型 {0} → {1}",
442
+ "swap.diffUnit": "unit {0} → {1}",
443
+ "swap.done": "已交换。该别名现在从 {0} 读取数据。",
444
+ "swap.factorField": "倍率",
445
+ "swap.formula": "公式",
446
+ "swap.formulaNone": "无",
447
+ "swap.from": "当前读取自:",
448
+ "swap.fromAlias": "依据别名数据点本身匹配:新数据源下恰好有一个名为“{0}”、角色为“{1}”的数据点。",
449
+ "swap.fromAliasMark": "来自别名",
450
+ "swap.fromDetect": "与在树中点击时相同:新数据源自己标注了数据点,检测器在那里识别出“{0}”。",
451
+ "swap.fromDetectMark": "已识别",
452
+ "swap.fromTpl": "与在树中点击设备时的做法相同:模板“{0}”与新数据源匹配,它知道哪个数据点属于这个位置——公式也一并带上。",
453
+ "swap.fromTplMark": "来自模板",
454
+ "swap.goHigher": "使用上一层",
455
+ "swap.gone": "该设备已不复存在——而这正是该工具的用途所在。",
456
+ "swap.guessHint": "标有“猜测”的行是根据姓名或角色进行匹配的——请逐一核对这些内容。",
457
+ "swap.guessedByAliasRole": "依据别名数据点的角色推测:新数据源下恰好有一个数据点的角色为“{0}”。请核对。",
458
+ "swap.guessedByName": "根据点名推测:新源下的某个内容也被称为“{0}”。这可能差得很远——请核实。",
459
+ "swap.guessedByRole": "根据角色推测:新来源下的一点具有相同的角色“{0}”。请核对。",
460
+ "swap.higherLevel": "向上一个级别({0})会找到一个目标,可获得{1}个{2}分,这里只有{3}分。",
461
+ "swap.keeps": "别名会保留其 ID、名称、角色和公式,以及数据库中的历史记录、所在房间和功能。唯一的变化在于每个数据点的读写位置。",
462
+ "swap.loadingValues": "正在读取新设备 …",
463
+ "swap.mapping": "映射",
464
+ "swap.mind": "请注意:",
465
+ "swap.mindHint": "别名公式保持不变——如果新数据源的缩放比例不同,后续的数值就会出错。该公式位于该点的详细信息行中。",
466
+ "swap.noDevice": "未找到设备。",
467
+ "swap.noMatch": "未找到匹配点",
468
+ "swap.noWriteMatch": "未找到写入目标——该点不会写入任何位置",
469
+ "swap.now": "立即兑换",
470
+ "swap.pickByHand": "… 或自行选择一个数据点",
471
+ "swap.pickFirst": "先选择一个新的来源。",
472
+ "swap.removeIt": "在交换时删除该点",
473
+ "swap.same": "这与之前的来源相同。",
474
+ "swap.search": "搜索(ID 或名称)……",
475
+ "swap.suggestionHint": "来自标注的建议——点击即填入字段。请对照上面的两个数值核对:标注可能是错的。",
476
+ "swap.title": "交换源",
477
+ "swap.to": "新来源",
478
+ "swap.tplDrop": "一并移除记住的模板({0} 个对象)",
479
+ "swap.tplFormulas": "{0} 个数据点的公式无论如何都会被新设备的公式取代——公式属于数据源,不属于别名。每一行都显示之后会是什么。",
480
+ "swap.tplGone": "该模板已不存在。",
481
+ "swap.tplOther": "另有一个模板与新数据源匹配:“{0}”。换源后可通过模板选择应用它——它会带来自己的公式和名称。",
482
+ "swap.tplStale": "记住的模板“{0}”与新数据源不匹配",
483
+ "swap.unchanged": "未作更改",
484
+ "swap.unitChanged": "单位:别名为 {0} · 新数据源:{1}",
485
+ "swap.unitField": "别名的单位",
486
+ "swap.unitHistWarn": "这个数据点挂着历史记录。历史数据用的是旧单位——中途换了倍率的序列无法修复。",
487
+ "swap.unitNoFactor": "不提供换算:这两个单位不是已知的配对。",
488
+ "swap.unitNone": "无",
489
+ "swap.unitResult": "结果:{0} {1}",
490
+ "swap.unitValOld": "你的别名目前显示:{0} {1}",
491
+ "swap.unknown": "(无法确定)",
492
+ "target.alsoRoom": "房间也设置为“{0}”吗?",
493
+ "target.alsoRoomNew": "没有“{0}”这个分区——要创建并分配它吗?",
494
+ "target.clearField": "清除字段",
495
+ "target.exists": "已经存在",
496
+ "target.folder": "放在……下面",
497
+ "target.folderHint": "用点号分隔子文件夹,例如:House.GF.Kitchen",
498
+ "target.folderPlaceholder": "empty = 位于 alias.0 的正下方",
499
+ "target.moveInstead": "不如把它挪开……",
500
+ "target.moveInsteadHint": "将现有的别名移至新ID处,而不是在其旁边再创建一个。",
501
+ "target.name": "姓名",
502
+ "target.openFolder": "打开“{0}”",
503
+ "target.twinExists": "该来源已有 {0} —— 那个就保留原样。",
504
+ "target.yes": "是",
505
+ "tpl.applyTemplate": "获取模板值 ({0})",
506
+ "tpl.applyTemplateHint": "将角色、类型、单位、公式和来源设置为模板中指定的内容。标题保持原样——那是你自己写的。在试运行之前不会写入任何内容。",
507
+ "tpl.choose": "— 选择模板 —",
508
+ "tpl.contains": "{0} 包含 {1}",
509
+ "tpl.fits": "适合",
510
+ "tpl.fitsNot": "✕ {0}",
511
+ "tpl.forbiddenThere": "{0} 虽然存在,但绝不能",
512
+ "tpl.forced": "被迫的",
513
+ "tpl.forcedHint": "此模板不会触发检测——这是手动选择的。",
514
+ "tpl.identifiedAs": "已识别为:{0}",
515
+ "tpl.label": "模板",
516
+ "tpl.manuallyChosen": "手工精选",
517
+ "tpl.missingPoint": "缺少 {0}",
518
+ "tpl.nameHint": "名称与“{0}”匹配——无法通过 MQTT 检测到",
519
+ "tpl.noJson": "{0} 未返回任何 JSON 数据",
520
+ "tpl.noNameHint": "从名称上无法看出端倪——“{0}”是默认值,在 MQTT 中它们无法区分",
521
+ "tpl.noOutputs": "未找到输出",
522
+ "tpl.none": "— 无模板 —",
523
+ "tpl.noneDetected": "未检测到模板",
524
+ "tpl.nor": " 也不在",
525
+ "tpl.output": "输出",
526
+ "tpl.outputsFound": "找到的输出:{0}",
527
+ "tpl.own": "自己的",
528
+ "tpl.possibleIn": "{0} 是该设备支持的命令(该数据点尚未创建)",
529
+ "tpl.presentIn": "{0} 出席",
530
+ "tpl.remembered": "被记住了",
531
+ "tpl.rememberedHint": "该别名是根据此模板生成的——除非您主动更改,否则它将一直保留。",
532
+ "tpl.showAllPoints": "加载该设备的全部数据点",
533
+ "tpl.showAllPointsHelp": "跳过模板建议,列出该设备拥有的所有数据点,包括模板中未提及的那些。在此处,您可以将其中任意一个数据点拖入别名中。",
534
+ "tpl.showProposal": "加载模板提案",
535
+ "tpl.showProposalHelp": "回到该设备模板中的建议。",
536
+ "tpl.skippedChip": "{0} 无来源",
537
+ "tpl.skippedEmpty": "“{0}”的分数本应更高,但在该设备上无法生成任何一行——已跳过",
538
+ "tpl.skippedHead": "{0} 因源文件缺失而被省略",
539
+ "tpl.skippedNowhere": "{0}:既不在{1}中",
540
+ "tpl.skippedSource": "{0}: 缺少 {1}",
541
+ "tpl.skippedWhy": "{0}: {1}",
542
+ "tpl.whyNoField": "{0} 没有字段 {1}",
543
+ "tpl.whyNoJson": "{0} 未返回任何 JSON 数据",
544
+ "tpl.whyNoPoint": "{0} 不存在",
545
+ "tpl.whyNone": "为什么没有适用的模板",
546
+ "tpl.whyThis": "为什么选择这个模板",
547
+ "tpl.withoutField": "{0} 没有 {1}",
548
+ "tpl.wouldNeed": "实际上缺失:{0}",
549
+ "tpls.absolute": "固定物体",
550
+ "tpls.absoluteText": "它并不位于设备下方,因此对所有设备而言都是相同的。有时这恰恰是正确的——例如,一个共享的设定值。这不计入检测范围。",
551
+ "tpls.absoluteTitle": "“一点”指一个固定的物体。",
552
+ "tpls.andMore": "……以及另外 {0} 个,此处未列出",
553
+ "tpls.beats": "beats {0}",
554
+ "tpls.buildsNone": "不匹配——没有行能找到其来源",
555
+ "tpls.button": "另存为模板……",
556
+ "tpls.channelName": "每个输出通道",
557
+ "tpls.colDefault": "默认",
558
+ "tpls.colInTemplate": "在模板中",
559
+ "tpls.colName": "姓名",
560
+ "tpls.colPath": "路径(相对于设备)",
561
+ "tpls.colRequired": "必须存在",
562
+ "tpls.content": "内容审核",
563
+ "tpls.contentHelp": "这使得检测更加精准——并会排除未发送该数据块的设备。这正是“套接字”与“带计量功能的套接字”之间的区别所在。",
564
+ "tpls.contentRow": "{0} 必须包含 {1}",
565
+ "tpls.contradiction": "这个模板根本不适用。",
566
+ "tpls.contradictionText": "这些要点既被列为“必须”又被列为“禁止”:{0}。请将其从“必须”或“禁止”中的一类中移除。",
567
+ "tpls.deviceType": "设备类型",
568
+ "tpls.dropOff": "完全省略",
569
+ "tpls.dropOthers": "省略其他输出",
570
+ "tpls.droppedCount": "遗漏了{0}分。",
571
+ "tpls.evidence": "{0} 已验证",
572
+ "tpls.failed": "保存失败:",
573
+ "tpls.fallbacks": "+{0} 备用方案",
574
+ "tpls.fitsNot": "{0}× 不合适",
575
+ "tpls.function": "功能",
576
+ "tpls.head": "页眉",
577
+ "tpls.hits": "匹配到 {0} 台设备,其中 {1} 台获胜",
578
+ "tpls.id": "Id",
579
+ "tpls.idTaken": "该 ID 已属于“{0}”(v{1})。保存后将替换该条目。",
580
+ "tpls.json": "这就是被存储的内容",
581
+ "tpls.loadFailed": "未加载自定义模板",
582
+ "tpls.loadFailedHint": "实例配置未响应或报告了错误。您的模板并未丢失——只是在此视图中无法显示。只要此提示存在,保存操作可能会覆盖现有模板:请先重新加载。",
583
+ "tpls.lockBadHint": "名称提示不是一个可用的表达式",
584
+ "tpls.lockIdTaken": "该 ID 已属于“{0}”",
585
+ "tpls.lockNoId": "缺少 ID",
586
+ "tpls.lockNoRequired": "没有勾选任何必选项——该模板将无法匹配任何内容",
587
+ "tpls.lockNoRows": "没有一行了",
588
+ "tpls.lockedWhy": "保存功能已被锁定:",
589
+ "tpls.losesTo": "输给了 {0}",
590
+ "tpls.multiple": "该设备有多个输出端口",
591
+ "tpls.multipleHelp": "路径中的 {0} 被替换为 %N% —— 仅在路径段的末尾进行替换,因此 ENERGY.Power 保持不变。",
592
+ "tpls.multipleNoNumber": "请输入路径中的哪个数字作为输出。如果不输入,则模板保持为“1”。",
593
+ "tpls.multipleOff": "带有 POWER1、POWER2 … 的设备将变为一个文件夹,每个输出对应一个通道。",
594
+ "tpls.nameDe": "名称(德语)",
595
+ "tpls.nameEn": "姓名(英文)",
596
+ "tpls.nameHint": "姓名提示",
597
+ "tpls.nameHintBad": "这不是一个有效的表达式——它被视为“无匹配”。",
598
+ "tpls.nameHintHelp": "仅用于在同样适配的模板之间打破平局——例如“灯泡”与“灯座”。用 | 分隔单词。该机制称为“{0}”。",
599
+ "tpls.needsRow": "不匹配 — {0} 未找到任何结果",
600
+ "tpls.needsRowHint": "模板中的一行是必填项,但在该设备上找不到其来源——通常是因为该设备上的 JSON 消息中不存在该字段。此时该模板甚至不会被纳入考虑范围;排名第二的模板将取而代之。",
601
+ "tpls.noFunction": "— 无 —",
602
+ "tpls.noHits": "目前没有匹配的设备。请检查所需条件。",
603
+ "tpls.noInstance": "未找到实例 {0}。",
604
+ "tpls.noRequired": "没有勾选任何必选项——该模板将无法匹配任何内容。",
605
+ "tpls.noType": "— 无 —",
606
+ "tpls.onlyOne": "只有一个合适",
607
+ "tpls.otherOutputs": "{0} 个点指向其他输出({1})。",
608
+ "tpls.otherOutputsText": "一个适用于多个输出的模板通常只描述其中一个——其余的都是由此派生而来的。请取消选择设备上的外部点,否则该模板将仅适用于该设备。",
609
+ "tpls.pickDeviceFirst": "请先选择一台设备",
610
+ "tpls.rank": "排名",
611
+ "tpls.rowBuilt": "第1行",
612
+ "tpls.rowsBuilt": "{0} 行",
613
+ "tpls.saveAsNew": "另存为新模板",
614
+ "tpls.saveAsNewHint": "现有的保持不变",
615
+ "tpls.saveNew": "保存模板",
616
+ "tpls.saveUpdate": "更新模板",
617
+ "tpls.saved": "模板“{0}”已保存,版本 {1}。",
618
+ "tpls.savedWhere": "它位于实例配置({0})中,因此是备份的一部分。",
619
+ "tpls.saving": "正在保存……",
620
+ "tpls.shadowsPackage": "然后将覆盖已发布的版本",
621
+ "tpls.someOff": "在设备上已取消选中:{0}。这些选项默认处于“关闭”状态——在下一台设备上,它们会显示在列表中,只是没有被勾选。",
622
+ "tpls.states": "数据点",
623
+ "tpls.statesCount": "其中有 {0} 个",
624
+ "tpls.statesHelp": "左侧的勾选标记表示该点是否会被纳入模板。“默认”是该点在下一台设备上将被建议的状态——这取决于您在该设备上的选择。右侧的勾选标记表示该点是否必须存在,模板才能匹配。",
625
+ "tpls.takesOver": "{0} 更改模板",
626
+ "tpls.title": "另存为模板 — {0}",
627
+ "tpls.tryout": "试训",
628
+ "tpls.undrop": "撤销",
629
+ "tpls.updateIt": "更新模板“{0}”——其版本号变为 {1}",
630
+ "tpls.whatToDo": "应该发生什么",
631
+ "tpls.whichNumber": "此输出的数量",
632
+ "tpls.wissen": "+ {0} 个其他状态作为角色知识——用于“设备的全部数据点”视图",
633
+ "tree.aliases": "编辑别名",
634
+ "tree.branchAdd": "把该分支加入所选",
635
+ "tree.branchForeign": "这些分支不在同一个实例里。一个设备只在一个实例中——请选择有共同父节点的分支。",
636
+ "tree.branchHint": "有些适配器把一个设备拆到并列分支里——Matter 把开关放在一个分支、把计量放在另一个。多个分支合起来就是一个设备。与 Ctrl 单击相同。",
637
+ "tree.branchRemove": "把该分支移出所选",
638
+ "tree.collapseAll": "折叠全部",
639
+ "tree.emptyNode": "无数据点——该节点在数据库中存在,但为空",
640
+ "tree.expandAll": "展开全部",
641
+ "tree.exportMock": "导出为模拟设备",
642
+ "tree.exportMockHint": "将 {0} 之下的全部内容写入文件:对象和当前值,不含 native",
643
+ "tree.filter": "筛选……",
644
+ "tree.filterAria": "筛选对象",
645
+ "tree.importMock": "导入模拟设备 …",
646
+ "tree.importMockHint": "始终落在 {0} 之下——绝不写回原路径",
647
+ "tree.loading": "正在加载对象……",
648
+ "tree.looksLikeDevice": "看起来像是一个设备",
649
+ "tree.noObjectHint": "不是真正的文件夹",
650
+ "tree.nothingFound": "未找到任何内容",
651
+ "tree.sourceGone": "该别名的 {0} 个引用指向了一个不存在的源。js-controller 会永久记住这一点——只有删除并重新创建才能解决问题。",
652
+ "tree.sources": "创建别名",
653
+ "tree.templates": "模板",
654
+ "tv.addFallback": "添加备用来源",
655
+ "tv.addState": "添加数据点",
656
+ "tv.badContent": "“erkennung.inhalt” 必须是一个对象。",
657
+ "tv.badList": "“{0}” 必须是一个点列表。",
658
+ "tv.badName": "名称必须是字符串或语言对象。",
659
+ "tv.badNameHint": "该名称提示不是一个可用的表达式。",
660
+ "tv.badNoId": "缺少 ID。",
661
+ "tv.badNoStates": "缺少数据点(zustaende)。",
662
+ "tv.badNotObject": "预期接收一个作为 JSON 对象的模板。",
663
+ "tv.badRecog": "“erkennung” 必须是对象。",
664
+ "tv.badState": "{0} 个未命名或没有读写路径的数据点。",
665
+ "tv.badType": "该检测器不识别设备类型“{0}”。",
666
+ "tv.clickRow": "点击一行以编辑该数据点",
667
+ "tv.clickRowRead": "点击某一行即可查看该行内容——已发货的模板无法修改。",
668
+ "tv.delete": "删除",
669
+ "tv.deleteHint": "如果它覆盖了已发布的模板,那么该模板随后会重新出现。",
670
+ "tv.deleteSure": "真的删除",
671
+ "tv.detection": "检测",
672
+ "tv.discard": "丢弃更改",
673
+ "tv.duplicate": "重复项",
674
+ "tv.export": "导出为文件",
675
+ "tv.fallback": "备用来源",
676
+ "tv.fallbackHint": "如果工作台无法找到上述数据点——或其中的字段——它将按顺序尝试以下选项。其中第一个同时包含这两者的选项将被采用。",
677
+ "tv.flagsHelp": "“默认” = 在下一台设备上默认勾选。“必须存在” = 如果缺少此项,模板将完全不匹配——该项会被移至上方的必选列表中。“固定对象” = 读取路径不是相对于设备的,而是完整的对象 ID,且对所有设备都相同。",
678
+ "tv.forbidden": "不允许存在",
679
+ "tv.forbiddenHelp": "设备上绝对不能出现这些特征点,否则模板将无法匹配。这就是单插座与多插座的区别所在。多个特征点请用逗号分隔。缺失的特征点不作为匹配依据。",
680
+ "tv.hide": "隐藏",
681
+ "tv.importAndSave": "导入并保存",
682
+ "tv.importBad": "此文件不是模板。",
683
+ "tv.importFile": "导入……",
684
+ "tv.importNew": "保存后将生成“{0}”。",
685
+ "tv.importReplaces": "保存后,您的模板“{0}”将被替换——版本 {1} 将变为版本 {2}。",
686
+ "tv.importShadows": "将阴影保存到随附的模板“{0}”中。",
687
+ "tv.importTitle": "尚未保存任何内容。",
688
+ "tv.imported": "进口的",
689
+ "tv.inTemplate": "在模板中",
690
+ "tv.json": "JSON格式的模板",
691
+ "tv.makeOwn": "创建可编辑副本",
692
+ "tv.multi": "多个输出,每个输出对应一个通道 {0}",
693
+ "tv.nameHintShort": "仅用于打破符合条件且优先级相同的模板之间的平局。用 | 分隔单词。",
694
+ "tv.package": "已发货",
695
+ "tv.packageText": "它无法编辑,因此始终保持交付时的状态。使用“复制”功能会生成您自己的副本,该副本将作为原始文件的副本存在。",
696
+ "tv.packageTitle": "已发送模板。",
697
+ "tv.paneHead": "模板及其捕获的内容",
698
+ "tv.rank": "排名 {0}",
699
+ "tv.rankOwn": "该排名仅用于在你的模板之间进行比较。面对官方发布的模板时,你的模板无论如何都会胜出——这根本不需要高排名。",
700
+ "tv.rankPackage": "排名仅在已发布的模板之间进行比较,而且即使在这种情况下,也仅当证据和名称提示结果相同时才进行比较。",
701
+ "tv.readOnlyRow": "系统默认模板——请使用“编辑专用副本”进行修改。",
702
+ "tv.removeFallback": "删除",
703
+ "tv.removeState": "删除此项",
704
+ "tv.required2": "必须存在",
705
+ "tv.requiredCount": "{0} 所需积分",
706
+ "tv.requiredHelp": "设备上必须包含这些数据点,否则模板将无法匹配。多个数据点之间请用逗号分隔。每个必填数据点都会使模板更加精确,但同时也使其更加脆弱。",
707
+ "tv.save": "保存",
708
+ "tv.show": "显示",
709
+ "tv.unsaved": "未保存",
710
+ "use.again": "再读一遍",
711
+ "use.aliasHead": "别名",
712
+ "use.custom": "日志记录、智能名称",
713
+ "use.enums": "枚举",
714
+ "use.files": "文件",
715
+ "use.head": "引用来源",
716
+ "use.limits": "搜索结果为纯文本。仅搜索实例文件夹(vis.0、vis-2.0、web.0 等)中的文件——适配器自身的 Web 界面不包含在内,否则工作台会检索到这些适配器的示例及其自身的源文件。状态值不在搜索范围内,且文本搜索不会检索到运行时生成的 ID。",
717
+ "use.look": "查一下",
718
+ "use.lookHint": "搜索别名及其来源的ID——包括脚本、枚举、该点本身的条目、每个已加载的对象以及实例文件夹中的文件。仅在点击时执行,因为所有内容都会为此读取一次。",
719
+ "use.none": "—",
720
+ "use.objects": "对象",
721
+ "use.otherAliases": "上面还有其他别名",
722
+ "use.scripts": "脚本",
723
+ "use.searching": "正在搜索……",
724
+ "use.sourceHead": "来源",
725
+ "use.sourceHint": "一个仍被提及的源并非缺陷:为其提供数据的脚本恰好应该位于那里。某个位置是否应移至别名处,只需查看即可决定。",
726
+ "write.aliasNowAt": "该别名现在位于 {0}。",
727
+ "write.cannotWrite": "不能这样写:",
728
+ "write.changes": "变化",
729
+ "write.close": "关闭",
730
+ "write.createAlias": "创建别名……",
731
+ "write.createAll": "创建所有 {0} …",
732
+ "write.createAsOne": "作为单一设备创建……",
733
+ "write.createNamed": "创建 {0} …",
734
+ "write.createPerChannel": "每个频道一个子文件夹,共有 {0} 个……",
735
+ "write.createSendPoints": "创建 {0} 个缺失的发送数据点",
736
+ "write.deselected": "未选中",
737
+ "write.diffNew": "之后",
738
+ "write.diffOld": "之前",
739
+ "write.diffRaw": "显示原始顺序",
740
+ "write.diffSorted": "排序字段",
741
+ "write.diffSortedHint": "对象内部的字段顺序没有任何意义——同一位管理员将别名对象按四种不同的顺序写入。经过排序后,只剩下真正的差异;原始顺序则显示了它们实际的存储方式。",
742
+ "write.done": "已写入 {0} 个对象。",
743
+ "write.doneWithRemoved": "已写入 {0} 个对象,已删除 {1} 个对象。",
744
+ "write.dryOutputs": " — {0} 输出",
745
+ "write.dryTitleCreate": "创建别名——显示的内容如下",
746
+ "write.dryTitleDoneCreate": "已创建别名",
747
+ "write.dryTitleDoneUpdate": "别名已更新",
748
+ "write.dryTitleFailed": "并非所有内容都通过了",
749
+ "write.dryTitleUpdate": "更新别名——显示的内容如下",
750
+ "write.duplicateName": "{0}:名称出现两次。",
751
+ "write.enumsUnknown": "不会生成“Room”和“function”字段:无法加载枚举。别名本身会按所示方式创建。如果没有可靠的状态,现有的枚举将被一个仅包含此单一成员的新枚举所替换。",
752
+ "write.failed": "{0} 项操作失败:",
753
+ "write.new": "新",
754
+ "write.noName": "一个点没有名字。",
755
+ "write.noSourceChosen": "{0}:未选择来源。",
756
+ "write.noneSelected": "未选中任何数据点。",
757
+ "write.notInProposal": "未包含在提案中",
758
+ "write.notUnderAlias": "{0} 不在别名之下。——此处不会写任何内容",
759
+ "write.now": "立即创建",
760
+ "write.nowUpdate": "立即更新",
761
+ "write.pickDeviceFirst": "请先选择一台设备",
762
+ "write.remove": "删除",
763
+ "write.removeCount": "数据点:{0}",
764
+ "write.removeHint": "在别名中存在,但在草稿中已不再显示",
765
+ "write.retry": "请重试",
766
+ "write.rowSource": "来源",
767
+ "write.rowTarget": "目标",
768
+ "write.sourceMissing": "{0}:源 {1} 不存在。",
769
+ "write.summaryTail": "{0} 为新文件,{1} 将被覆盖",
770
+ "write.summaryTail3": "{0} 新增,{1} 变更,{2} 保持不变",
771
+ "write.unchanged": "未作更改",
772
+ "write.updateAlias": "更新别名……",
773
+ "write.updateAsOne": "作为一台设备进行更新……",
774
+ "write.updateNamed": "更新 {0} …",
775
+ "write.willKeep": "保留:{0}",
776
+ "write.willRemove": "已删除:{0}",
777
+ "write.writeSourceMissing": "{0}:待发送的数据点 {1} 尚未存在",
778
+ "write.writing": "正在写作……"
14
779
  }