iobroker.alias-workbench 0.11.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.
- package/README.md +19 -7
- package/admin/css/werkbank.css +73 -0
- package/admin/i18n/de.json +65 -0
- package/admin/i18n/en.json +65 -0
- package/admin/i18n/es.json +65 -0
- package/admin/i18n/fr.json +65 -0
- package/admin/i18n/it.json +65 -0
- package/admin/i18n/nl.json +65 -0
- package/admin/i18n/pl.json +65 -0
- package/admin/i18n/pt.json +65 -0
- package/admin/i18n/ru.json +65 -0
- package/admin/i18n/uk.json +65 -0
- package/admin/i18n/zh-cn.json +65 -0
- package/admin/js/attrappe.js +749 -0
- package/admin/js/baum.js +52 -5
- package/admin/js/entwurf.js +133 -6
- package/admin/js/ergebnis.js +77 -2
- package/admin/js/quellentausch.js +823 -16
- package/admin/js/sprache.js +4 -0
- package/admin/js/zustand.js +28 -0
- package/admin/tab.html +24 -0
- package/io-package.json +14 -14
- package/package.json +2 -2
package/admin/i18n/pt.json
CHANGED
|
@@ -259,6 +259,32 @@
|
|
|
259
259
|
"list.tplDiffers": "difere do modelo",
|
|
260
260
|
"list.tplHint": "Verifica exatamente os pontos que o modelo propõe — independentemente do que o alias contenha atualmente.",
|
|
261
261
|
"list.willBeCreated": "será criado:",
|
|
262
|
+
"mock.colName": "Nome",
|
|
263
|
+
"mock.colPath": "Caminho",
|
|
264
|
+
"mock.colRole": "Função",
|
|
265
|
+
"mock.colType": "Tipo",
|
|
266
|
+
"mock.colValue": "Valor",
|
|
267
|
+
"mock.counts": "{0} entradas, {1} com valor · escrito por alias-workbench {2} · origem {3}",
|
|
268
|
+
"mock.inNames": "Atenção: {0} identificadores estão também no caminho ou nos nomes — omitir `native` não os remove",
|
|
269
|
+
"mock.more": "… e mais {0} entradas (não mostradas, mas vão para o ficheiro)",
|
|
270
|
+
"mock.noNative": "`native` não está incluído. Desmarque os valores que não quer partilhar.",
|
|
271
|
+
"mock.save": "Guardar ficheiro",
|
|
272
|
+
"mock.suspicious": "Parece: {0}",
|
|
273
|
+
"mock.tooBig": "Isso é muito: {0} entradas (um dispositivo costuma ter menos de {1})",
|
|
274
|
+
"mock.tooBigHint": "Queria um único dispositivo? A exportação funciona na mesma.",
|
|
275
|
+
"mockin.bad": "Este ficheiro não serve",
|
|
276
|
+
"mockin.badEntry": "{0} entradas não têm caminho.",
|
|
277
|
+
"mockin.badFormat": "Formato {0}, mas esta versão lê {1}.",
|
|
278
|
+
"mockin.badJson": "Não é legível como JSON.",
|
|
279
|
+
"mockin.badObjects": "Sem objetos no ficheiro.",
|
|
280
|
+
"mockin.counts": "{0} objetos, {1} com valor, {2} já existem",
|
|
281
|
+
"mockin.create": "Criar agora",
|
|
282
|
+
"mockin.exists": "(já existe)",
|
|
283
|
+
"mockin.from": "De {0} · escrito por alias-workbench {1} · origem {2}",
|
|
284
|
+
"mockin.name": "Nome",
|
|
285
|
+
"mockin.nameTaken": "O nome «{0}» já existe — estão lá {1} objetos",
|
|
286
|
+
"mockin.nameTakenHint": "Escolha outro nome. Escrever num dispositivo fictício existente misturaria os dois: só os caminhos coincidentes são substituídos, o resto do antigo fica — e resultaria um dispositivo que nunca existiu.",
|
|
287
|
+
"mockin.noRoot": "Falta a entrada da raiz.",
|
|
262
288
|
"move.button": "Avançar …",
|
|
263
289
|
"move.done": "Movido. O alias está agora em {0}.",
|
|
264
290
|
"move.exists": "{0} já existe. Elimine-o primeiro ou escolha outro nome.",
|
|
@@ -375,6 +401,9 @@
|
|
|
375
401
|
"pattern.typeOr": " ou ",
|
|
376
402
|
"pattern.usualOnly": "apenas os habituais",
|
|
377
403
|
"pattern.viaRole": "função {0}",
|
|
404
|
+
"result.addNeighbours": "Juntar ramos vizinhos ({0})",
|
|
405
|
+
"result.addNeighboursHint": "Alguns adaptadores dividem um aparelho por ramos vizinhos. Isto junta todos; para escolher ramos isolados use Ctrl+clique na árvore.",
|
|
406
|
+
"result.addNeighboursSame": "Segundo o adaptador, estes ramos pertencem a um aparelho — mesmo id de nó e mesmo ponto de ligação. Isto junta todos; para ramos isolados use Ctrl+clique.",
|
|
378
407
|
"result.allAnyway": "De qualquer forma, tudo ",
|
|
379
408
|
"result.channelsHint": "Este dispositivo tem {0} canais. Escolha abaixo: tudo numa única pasta, ou espelhar a estrutura da fonte — uma pasta para o dispositivo, com um canal por baixo de cada uma.",
|
|
380
409
|
"result.extraSwitches": "Incluídos: {0} pontos de outros canais para os quais o padrão {1} não dispõe de espaço. Estes são criados, mas não contam como interruptor ou feedback do dispositivo. Para um controlo separado, utilize a opção «um dispositivo por canal» abaixo.",
|
|
@@ -405,18 +434,32 @@
|
|
|
405
434
|
"roles.slotTaken": "tirada por {0}",
|
|
406
435
|
"swap.blocked": "Decida primeiro — estes pontos não podem coexistir: {0}. Ou os remove durante a troca ou mantém a troca tal como está; um ponto destinado à gravação precisa de um destino de gravação.",
|
|
407
436
|
"swap.button": "Trocar fonte …",
|
|
437
|
+
"swap.byHandCheck": "Fórmula, unidade e intervalo ficam como estão no alias — verifique-os depois.",
|
|
438
|
+
"swap.byHandHint": "Indicou este ponto você mesmo — a bancada não o conseguiu deduzir do novo aparelho.",
|
|
439
|
+
"swap.byHandMark": "à mão",
|
|
408
440
|
"swap.diffRange": "intervalo {0} → {1}",
|
|
409
441
|
"swap.diffType": "tipo {0} → {1}",
|
|
410
442
|
"swap.diffUnit": "unidade {0} → {1}",
|
|
411
443
|
"swap.done": "Invertido. O alias começa agora a contar a partir de {0}.",
|
|
444
|
+
"swap.factorField": "Fator",
|
|
445
|
+
"swap.formula": "Fórmula",
|
|
446
|
+
"swap.formulaNone": "nenhuma",
|
|
412
447
|
"swap.from": "Atualmente, a leitura é feita a partir de:",
|
|
448
|
+
"swap.fromAlias": "Mapeado pelo próprio ponto do alias: sob a nova origem existe exatamente um ponto chamado «{0}» com o papel «{1}».",
|
|
449
|
+
"swap.fromAliasMark": "do alias",
|
|
450
|
+
"swap.fromDetect": "Mapeado como ao clicar no aparelho na árvore: a nova origem rotula os seus pontos e o detetor reconhece ali «{0}».",
|
|
451
|
+
"swap.fromDetectMark": "reconhecido",
|
|
452
|
+
"swap.fromTpl": "Mapeado como ao clicar no aparelho na árvore: o modelo «{0}» serve para a nova origem e sabe que ponto pertence a este lugar — fórmula incluída.",
|
|
453
|
+
"swap.fromTplMark": "do modelo",
|
|
413
454
|
"swap.goHigher": "utilize o nível superior",
|
|
414
455
|
"swap.gone": "Este dispositivo já não existe — e é precisamente para isso que isto serve.",
|
|
415
456
|
"swap.guessHint": "As linhas marcadas como «estimadas» foram correspondidas por nome ou função — por favor, verifique-as individualmente.",
|
|
457
|
+
"swap.guessedByAliasRole": "Adivinhado pelo papel do ponto do alias: sob a nova origem exatamente um ponto tem o papel «{0}». Por favor verifique.",
|
|
416
458
|
"swap.guessedByName": "A julgar pelo nome do ponto: algo na nova fonte também se chama «{0}». Isso pode estar muito longe — por favor, verifica.",
|
|
417
459
|
"swap.guessedByRole": "Concluí a partir da função: um ponto na nova fonte tem a mesma função «{0}». Por favor, verifique.",
|
|
418
460
|
"swap.higherLevel": "Um nível acima ({0}) encontra um alvo para {1} de {2} pontos; aqui, apenas {3}.",
|
|
419
461
|
"swap.keeps": "O alias mantém o seu ID, nomes, funções e fórmulas, o seu histórico na base de dados, bem como a sua sala e função. A única diferença reside no local de onde cada ponto lê e para onde escreve.",
|
|
462
|
+
"swap.loadingValues": "A ler o novo aparelho …",
|
|
420
463
|
"swap.mapping": "Mapeamento",
|
|
421
464
|
"swap.mind": "Cuidado:",
|
|
422
465
|
"swap.mindHint": "As fórmulas dos alias permanecem inalteradas — se a nova fonte tiver uma escala diferente, os valores ficarão errados posteriormente. A fórmula encontra-se na linha de detalhes do ponto.",
|
|
@@ -424,13 +467,27 @@
|
|
|
424
467
|
"swap.noMatch": "não foi encontrado nenhum ponto correspondente",
|
|
425
468
|
"swap.noWriteMatch": "Não foi encontrado nenhum destino de gravação — este ponto não será gravado em lado nenhum",
|
|
426
469
|
"swap.now": "Trocar agora",
|
|
470
|
+
"swap.pickByHand": "… ou escolha um ponto você mesmo",
|
|
427
471
|
"swap.pickFirst": "Escolhe primeiro uma nova fonte.",
|
|
428
472
|
"swap.removeIt": "remover este ponto durante a troca",
|
|
429
473
|
"swap.same": "É a mesma fonte de antes.",
|
|
430
474
|
"swap.search": "Pesquisar (ID ou nome) …",
|
|
475
|
+
"swap.suggestionHint": "Uma sugestão vinda da rotulagem — clique para a colocar no campo. Confira com os dois valores acima: o rótulo pode estar errado.",
|
|
431
476
|
"swap.title": "Fonte do swap",
|
|
432
477
|
"swap.to": "Nova fonte",
|
|
478
|
+
"swap.tplDrop": "Remover também o modelo memorizado ({0} objetos)",
|
|
479
|
+
"swap.tplFormulas": "As fórmulas de {0} pontos são de qualquer forma substituídas pelas do novo aparelho — pertencem à origem, não ao alias. Cada linha mostra o que ficará lá.",
|
|
480
|
+
"swap.tplGone": "Este modelo já não existe.",
|
|
481
|
+
"swap.tplOther": "Há outro modelo que serve para a nova origem: «{0}». Pode aplicá-lo após a troca na seleção de modelos — traz as suas próprias fórmulas e nomes.",
|
|
482
|
+
"swap.tplStale": "O modelo memorizado «{0}» não serve para a nova origem",
|
|
433
483
|
"swap.unchanged": "inalterado",
|
|
484
|
+
"swap.unitChanged": "Unidade: no alias {0} · nova origem: {1}",
|
|
485
|
+
"swap.unitField": "Unidade no alias",
|
|
486
|
+
"swap.unitHistWarn": "Há um registo ligado a este ponto. O histórico está na unidade antiga — uma série que muda de fator a meio não se consegue reparar.",
|
|
487
|
+
"swap.unitNoFactor": "Sem conversão: estas duas unidades não formam um par conhecido.",
|
|
488
|
+
"swap.unitNone": "nenhuma",
|
|
489
|
+
"swap.unitResult": "Resultado: {0} {1}",
|
|
490
|
+
"swap.unitValOld": "O seu alias mostra hoje: {0} {1}",
|
|
434
491
|
"swap.unknown": "(não é possível determinar)",
|
|
435
492
|
"target.alsoRoom": "Também definir o parâmetro «room» como «{0}»?",
|
|
436
493
|
"target.alsoRoomNew": "Não existe a sala «{0}» — devemos criá-la e atribuí-la?",
|
|
@@ -574,11 +631,19 @@
|
|
|
574
631
|
"tpls.whichNumber": "Número desta saída",
|
|
575
632
|
"tpls.wissen": "+ mais {0} estados como conhecimento de função — utilizados na vista «Todos os pontos de dados do dispositivo»",
|
|
576
633
|
"tree.aliases": "Editar alias",
|
|
634
|
+
"tree.branchAdd": "Juntar este ramo à seleção",
|
|
635
|
+
"tree.branchForeign": "Esses ramos não estão na mesma instância. Um aparelho vive numa instância — escolha ramos com um nó-pai comum.",
|
|
636
|
+
"tree.branchHint": "Alguns adaptadores dividem um aparelho por ramos vizinhos — o Matter põe o interruptor num e as medições noutro. Vários ramos formam juntos um aparelho. O mesmo que Ctrl+clique.",
|
|
637
|
+
"tree.branchRemove": "Retirar este ramo da seleção",
|
|
577
638
|
"tree.collapseAll": "ocultar tudo",
|
|
578
639
|
"tree.emptyNode": "sem registos — o nó existe na base de dados, mas está vazio",
|
|
579
640
|
"tree.expandAll": "expandir tudo",
|
|
641
|
+
"tree.exportMock": "Exportar como dispositivo fictício",
|
|
642
|
+
"tree.exportMockHint": "Grava tudo abaixo de {0} num ficheiro: objetos e valores atuais, sem native",
|
|
580
643
|
"tree.filter": "filtro …",
|
|
581
644
|
"tree.filterAria": "Filtrar objetos",
|
|
645
|
+
"tree.importMock": "Importar dispositivo fictício …",
|
|
646
|
+
"tree.importMockHint": "Vai sempre parar a {0} — nunca ao caminho original",
|
|
582
647
|
"tree.loading": "a carregar objetos …",
|
|
583
648
|
"tree.looksLikeDevice": "parece ser um único dispositivo",
|
|
584
649
|
"tree.noObjectHint": "não é uma pasta verdadeira",
|
package/admin/i18n/ru.json
CHANGED
|
@@ -259,6 +259,32 @@
|
|
|
259
259
|
"list.tplDiffers": "отличается от шаблона",
|
|
260
260
|
"list.tplHint": "Проверяет именно те моменты, которые предлагаются в шаблоне — независимо от того, что сегодня содержится в псевдониме.",
|
|
261
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": "Отсутствует запись корня.",
|
|
262
288
|
"move.button": "Перейти …",
|
|
263
289
|
"move.done": "Перемещено. Псевдоним теперь находится по адресу {0}.",
|
|
264
290
|
"move.exists": "{0} уже существует. Сначала удалите его или выберите другое имя.",
|
|
@@ -375,6 +401,9 @@
|
|
|
375
401
|
"pattern.typeOr": " или ",
|
|
376
402
|
"pattern.usualOnly": "только обычные",
|
|
377
403
|
"pattern.viaRole": "роль {0}",
|
|
404
|
+
"result.addNeighbours": "Добавить соседние ветки ({0})",
|
|
405
|
+
"result.addNeighboursHint": "Некоторые адаптеры делят устройство на соседние ветки. Здесь берутся все; отдельные выбираются Ctrl-кликом в дереве.",
|
|
406
|
+
"result.addNeighboursSame": "По данным адаптера эти ветки принадлежат одному устройству — тот же идентификатор узла и тот же признак связи. Здесь берутся все; отдельные выбираются Ctrl-кликом.",
|
|
378
407
|
"result.allAnyway": "В любом случае, все ",
|
|
379
408
|
"result.channelsHint": "Это устройство имеет {0} каналов. Выберите ниже: либо разместить всё в одной папке, либо отразить структуру источника — папка для устройства, а под ней по одному каналу.",
|
|
380
409
|
"result.extraSwitches": "Включено: {0} балл с других каналов, для которых в шаблоне {1} нет места. Они создаются, но не учитываются как переключатель или обратная связь устройства. Для отдельного управления воспользуйтесь пунктом «одно устройство на канал» ниже.",
|
|
@@ -405,18 +434,32 @@
|
|
|
405
434
|
"roles.slotTaken": "сделано {0}",
|
|
406
435
|
"swap.blocked": "Сначала примите решение — эти точки не могут существовать одновременно: {0}. Либо удалите их во время замены, либо оставьте замену без изменений; точка, предназначенная для записи, нуждается в объекте записи.",
|
|
407
436
|
"swap.button": "Заменить источник …",
|
|
437
|
+
"swap.byHandCheck": "Формула, единица и диапазон остаются как в алиасе — проверьте их потом.",
|
|
438
|
+
"swap.byHandHint": "Эту точку вы указали сами — верстак не смог вывести её из нового устройства.",
|
|
439
|
+
"swap.byHandMark": "вручную",
|
|
408
440
|
"swap.diffRange": "диапазон от {0} до {1}",
|
|
409
441
|
"swap.diffType": "тип {0} → {1}",
|
|
410
442
|
"swap.diffUnit": "единица {0} → {1}",
|
|
411
443
|
"swap.done": "Порядок изменен. Теперь псевдоним начинается с {0}.",
|
|
444
|
+
"swap.factorField": "Множитель",
|
|
445
|
+
"swap.formula": "Формула",
|
|
446
|
+
"swap.formulaNone": "нет",
|
|
412
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": "из шаблона",
|
|
413
454
|
"swap.goHigher": "используйте уровень выше",
|
|
414
455
|
"swap.gone": "Этого устройства больше нет — и именно для этого оно и предназначено.",
|
|
415
456
|
"swap.guessHint": "Строки с пометкой «предположительно» были сопоставлены по имени или должности — пожалуйста, проверьте их по отдельности.",
|
|
457
|
+
"swap.guessedByAliasRole": "Предположение по роли точки алиаса: под новым источником ровно одна точка имеет роль «{0}». Проверьте.",
|
|
416
458
|
"swap.guessedByName": "Судя по названию точки: что-то под новым источником тоже называется «{0}». Это может быть далеко — пожалуйста, проверьте.",
|
|
417
459
|
"swap.guessedByRole": "Судя по роли: точка под новым источником имеет ту же роль «{0}». Проверьте, пожалуйста.",
|
|
418
460
|
"swap.higherLevel": "На уровень выше ({0}) цель набирает {1} из {2} очков, а здесь — только {3}.",
|
|
419
461
|
"swap.keeps": "Псевдоним сохраняет свой идентификатор, имена, роли и формулы, историю в базе данных, а также комнату и функцию. Меняется лишь то, откуда и куда происходит чтение и запись данных.",
|
|
462
|
+
"swap.loadingValues": "Чтение нового устройства …",
|
|
420
463
|
"swap.mapping": "Составление карт",
|
|
421
464
|
"swap.mind": "Будьте осторожны:",
|
|
422
465
|
"swap.mindHint": "Формулы псевдонимов остаются без изменений — если новый источник масштабируется иначе, значения впоследствии будут неверными. Формула находится в строке с подробными сведениями о точке.",
|
|
@@ -424,13 +467,27 @@
|
|
|
424
467
|
"swap.noMatch": "соответствующая точка не найдена",
|
|
425
468
|
"swap.noWriteMatch": "не найден объект для записи — данная точка никуда не запишется",
|
|
426
469
|
"swap.now": "Обменять сейчас",
|
|
470
|
+
"swap.pickByHand": "… или выберите точку сами",
|
|
427
471
|
"swap.pickFirst": "Сначала выберите новый источник.",
|
|
428
472
|
"swap.removeIt": "удалить этот пункт при замене",
|
|
429
473
|
"swap.same": "Это тот же источник, что и раньше.",
|
|
430
474
|
"swap.search": "Поиск (по идентификатору или имени) …",
|
|
475
|
+
"swap.suggestionHint": "Подсказка из подписи — щелчок подставит её в поле. Сверьте с двумя значениями выше: подпись может быть неверной.",
|
|
431
476
|
"swap.title": "Обмен источниками",
|
|
432
477
|
"swap.to": "Новый источник",
|
|
478
|
+
"swap.tplDrop": "Также удалить запомненный шаблон ({0} объектов)",
|
|
479
|
+
"swap.tplFormulas": "Формулы {0} точек в любом случае заменяются формулами нового устройства — они принадлежат источнику, а не алиасу. В каждой строке видно, что будет стоять потом.",
|
|
480
|
+
"swap.tplGone": "Этого шаблона больше нет.",
|
|
481
|
+
"swap.tplOther": "К новому источнику подходит другой шаблон: «{0}». Его можно применить после замены через выбор шаблона — он принесёт свои формулы и имена.",
|
|
482
|
+
"swap.tplStale": "Запомненный шаблон «{0}» не подходит новому источнику",
|
|
433
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}",
|
|
434
491
|
"swap.unknown": "(не может быть определено)",
|
|
435
492
|
"target.alsoRoom": "Значение для комнаты тоже установить на «{0}»?",
|
|
436
493
|
"target.alsoRoomNew": "Нет комнаты «{0}» — создать и присвоить ей номер?",
|
|
@@ -574,11 +631,19 @@
|
|
|
574
631
|
"tpls.whichNumber": "Номер данного вывода",
|
|
575
632
|
"tpls.wissen": "+ ещё {0} штатов в качестве знаний о ролях — используется в представлении «Все точки данных устройства»",
|
|
576
633
|
"tree.aliases": "Изменить псевдоним",
|
|
634
|
+
"tree.branchAdd": "Добавить эту ветку к выбору",
|
|
635
|
+
"tree.branchForeign": "Эти ветки не в одном экземпляре. Устройство живёт в одном экземпляре — берите ветки с общим родителем.",
|
|
636
|
+
"tree.branchHint": "Некоторые адаптеры делят устройство на соседние ветки — Matter кладёт выключатель в одну, измерения в другую. Несколько веток вместе дают одно устройство. То же, что Ctrl-клик.",
|
|
637
|
+
"tree.branchRemove": "Убрать эту ветку из выбора",
|
|
577
638
|
"tree.collapseAll": "свернуть всё",
|
|
578
639
|
"tree.emptyNode": "нет данных — узел существует в базе данных, но не содержит данных",
|
|
579
640
|
"tree.expandAll": "развернуть всё",
|
|
641
|
+
"tree.exportMock": "Выгрузить как макет устройства",
|
|
642
|
+
"tree.exportMockHint": "Записывает всё ниже {0} в файл: объекты и текущие значения, без native",
|
|
580
643
|
"tree.filter": "фильтр …",
|
|
581
644
|
"tree.filterAria": "Фильтр объектов",
|
|
645
|
+
"tree.importMock": "Загрузить макет устройства …",
|
|
646
|
+
"tree.importMockHint": "Всегда попадает в {0} — никогда по исходному пути",
|
|
582
647
|
"tree.loading": "загрузка объектов…",
|
|
583
648
|
"tree.looksLikeDevice": "выглядит как одно устройство",
|
|
584
649
|
"tree.noObjectHint": "не настоящая папка",
|
package/admin/i18n/uk.json
CHANGED
|
@@ -259,6 +259,32 @@
|
|
|
259
259
|
"list.tplDiffers": "відрізняється від шаблону",
|
|
260
260
|
"list.tplHint": "Перевіряє саме ті елементи, які передбачені шаблоном — незалежно від того, що на даний момент міститься в псевдонімі.",
|
|
261
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": "Бракує запису кореня.",
|
|
262
288
|
"move.button": "Перейти …",
|
|
263
289
|
"move.done": "Переміщено. Псевдонім тепер знаходиться за адресою {0}.",
|
|
264
290
|
"move.exists": "{0} вже існує. Спочатку видаліть його або виберіть іншу назву.",
|
|
@@ -375,6 +401,9 @@
|
|
|
375
401
|
"pattern.typeOr": " або ",
|
|
376
402
|
"pattern.usualOnly": "тільки звичайні",
|
|
377
403
|
"pattern.viaRole": "роль {0}",
|
|
404
|
+
"result.addNeighbours": "Додати сусідні гілки ({0})",
|
|
405
|
+
"result.addNeighboursHint": "Деякі адаптери розподіляють пристрій по сусідніх гілках. Тут беруться всі; окремі обирають Ctrl-кліком у дереві.",
|
|
406
|
+
"result.addNeighboursSame": "За даними адаптера ці гілки належать одному пристрою — той самий ідентифікатор вузла і той самий пункт зʼєднання. Тут беруться всі; інакше Ctrl-клік.",
|
|
378
407
|
"result.allAnyway": "У будь-якому разі ",
|
|
379
408
|
"result.channelsHint": "Цей пристрій має {0} каналів. Оберіть один із варіантів нижче: розмістити все в одній папці або відтворити структуру джерела — папку для пристрою, а під нею по одному каналу.",
|
|
380
409
|
"result.extraSwitches": "Включено: {0} точок з інших каналів, для яких у шаблоні {1} немає місця. Вони створюються, але не враховуються як перемикач або зворотний зв’язок пристрою. Для окремого керування скористайтеся опцією «один пристрій на канал», наведеною нижче.",
|
|
@@ -405,18 +434,32 @@
|
|
|
405
434
|
"roles.slotTaken": "зроблено {0}",
|
|
406
435
|
"swap.blocked": "Спочатку вирішіть — ці точки не можуть бути присутніми: {0}. Або видаліть їх під час обміну, або залиште обмін без змін; точка, призначена для запису, потребує об’єкта запису.",
|
|
407
436
|
"swap.button": "Обміняти джерело …",
|
|
437
|
+
"swap.byHandCheck": "Формула, одиниця та діапазон залишаються як в аліасі — перевірте їх потім.",
|
|
438
|
+
"swap.byHandHint": "Цю точку ви вказали самі — верстат не зміг вивести її з нового пристрою.",
|
|
439
|
+
"swap.byHandMark": "вручну",
|
|
408
440
|
"swap.diffRange": "діапазон {0} → {1}",
|
|
409
441
|
"swap.diffType": "тип {0} → {1}",
|
|
410
442
|
"swap.diffUnit": "одиниця {0} → {1}",
|
|
411
443
|
"swap.done": "Обміняно. Псевдонім тепер зчитує дані з {0}.",
|
|
444
|
+
"swap.factorField": "Множник",
|
|
445
|
+
"swap.formula": "Формула",
|
|
446
|
+
"swap.formulaNone": "немає",
|
|
412
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": "із шаблону",
|
|
413
454
|
"swap.goHigher": "використовуйте рівень вище",
|
|
414
455
|
"swap.gone": "Цього пристрою вже не існує — і саме для цього й призначений цей пристрій.",
|
|
415
456
|
"swap.guessHint": "Рядки, позначені як «припущення», були зіставлені за іменем або посадою — будь ласка, перевірте їх окремо.",
|
|
457
|
+
"swap.guessedByAliasRole": "Припущення за роллю точки аліаса: під новим джерелом рівно одна точка має роль «{0}». Перевірте.",
|
|
416
458
|
"swap.guessedByName": "Як можна здогадатися з назви точки: щось у новому джерелі також називається «{0}». Це може бути далеко від істини — будь ласка, перевірте.",
|
|
417
459
|
"swap.guessedByRole": "Висновок на основі ролі: елемент під новим джерелом має ту саму роль «{0}». Будь ласка, перевірте.",
|
|
418
460
|
"swap.higherLevel": "На рівень вище ({0}) знайдено ціль для {1} з {2} балів, тут лише {3}.",
|
|
419
461
|
"swap.keeps": "Псевдонім зберігає свій ідентифікатор, імена, ролі та формули, історію в базі даних, а також кімнату та функцію. Змінюється лише те, звідки та куди кожна точка зчитує та записує дані.",
|
|
462
|
+
"swap.loadingValues": "Читання нового пристрою …",
|
|
420
463
|
"swap.mapping": "Картографування",
|
|
421
464
|
"swap.mind": "Будьте обережні:",
|
|
422
465
|
"swap.mindHint": "Формули псевдонімів залишаються без змін — якщо нове джерело масштабується інакше, значення згодом будуть неправильними. Формула розміщується у рядку детальної інформації про точку.",
|
|
@@ -424,13 +467,27 @@
|
|
|
424
467
|
"swap.noMatch": "не знайдено відповідної точки",
|
|
425
468
|
"swap.noWriteMatch": "не знайдено об’єкта для запису — цей пункт нікуди не запишеться",
|
|
426
469
|
"swap.now": "Обміняти зараз",
|
|
470
|
+
"swap.pickByHand": "… або оберіть точку самі",
|
|
427
471
|
"swap.pickFirst": "Спочатку виберіть нове джерело.",
|
|
428
472
|
"swap.removeIt": "видалити цей пункт під час обміну місцями",
|
|
429
473
|
"swap.same": "Це те саме джерело, що й раніше.",
|
|
430
474
|
"swap.search": "Пошук (за ідентифікатором або назвою) …",
|
|
475
|
+
"swap.suggestionHint": "Підказка з підпису — клік вставить її в поле. Звірте з двома значеннями вище: підпис може бути хибним.",
|
|
431
476
|
"swap.title": "Обміняти джерело",
|
|
432
477
|
"swap.to": "Нове джерело",
|
|
478
|
+
"swap.tplDrop": "Прибрати також запам’ятований шаблон ({0} об’єктів)",
|
|
479
|
+
"swap.tplFormulas": "Формули {0} точок у будь-якому разі замінюються формулами нового пристрою — вони належать джерелу, а не аліасу. Кожен рядок показує, що там буде.",
|
|
480
|
+
"swap.tplGone": "Цього шаблону більше немає.",
|
|
481
|
+
"swap.tplOther": "До нового джерела підходить інший шаблон: «{0}». Його можна застосувати після заміни через вибір шаблону — він принесе власні формули та назви.",
|
|
482
|
+
"swap.tplStale": "Запам’ятований шаблон «{0}» не підходить новому джерелу",
|
|
433
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}",
|
|
434
491
|
"swap.unknown": "(неможливо визначити)",
|
|
435
492
|
"target.alsoRoom": "Кімнату теж встановити на «{0}»?",
|
|
436
493
|
"target.alsoRoomNew": "Немає кімнати «{0}» — створити та призначити її?",
|
|
@@ -574,11 +631,19 @@
|
|
|
574
631
|
"tpls.whichNumber": "Номер цього випуску",
|
|
575
632
|
"tpls.wissen": "+ {0} додаткових станів як інформація про роль — використовується у вікні «Усі дані пристрою»",
|
|
576
633
|
"tree.aliases": "Редагувати псевдонім",
|
|
634
|
+
"tree.branchAdd": "Додати цю гілку до вибору",
|
|
635
|
+
"tree.branchForeign": "Ці гілки не в одному екземплярі. Пристрій живе в одному екземплярі — беріть гілки зі спільним батьківським вузлом.",
|
|
636
|
+
"tree.branchHint": "Деякі адаптери розподіляють пристрій по сусідніх гілках — Matter кладе вимикач в одну, а вимірювання в іншу. Кілька гілок разом утворюють один пристрій. Те саме, що Ctrl-клік.",
|
|
637
|
+
"tree.branchRemove": "Прибрати цю гілку з вибору",
|
|
577
638
|
"tree.collapseAll": "згорнути все",
|
|
578
639
|
"tree.emptyNode": "відсутні дані — вузол існує в базі даних, але не містить даних",
|
|
579
640
|
"tree.expandAll": "розгорнути все",
|
|
641
|
+
"tree.exportMock": "Вивантажити як макет пристрою",
|
|
642
|
+
"tree.exportMockHint": "Записує все нижче {0} у файл: об’єкти та поточні значення, без native",
|
|
580
643
|
"tree.filter": "фільтр …",
|
|
581
644
|
"tree.filterAria": "Фільтрувати об’єкти",
|
|
645
|
+
"tree.importMock": "Завантажити макет пристрою …",
|
|
646
|
+
"tree.importMockHint": "Завжди потрапляє під {0} — ніколи за початковим шляхом",
|
|
582
647
|
"tree.loading": "завантаження об’єктів …",
|
|
583
648
|
"tree.looksLikeDevice": "виглядає як окремий пристрій",
|
|
584
649
|
"tree.noObjectHint": "це не справжня папка",
|
package/admin/i18n/zh-cn.json
CHANGED
|
@@ -259,6 +259,32 @@
|
|
|
259
259
|
"list.tplDiffers": "与模板不同",
|
|
260
260
|
"list.tplHint": "会精确检查模板中提出的各项内容——无论该别名当前包含什么内容。",
|
|
261
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": "缺少根条目。",
|
|
262
288
|
"move.button": "移动……",
|
|
263
289
|
"move.done": "已移动。该别名现位于 {0}。",
|
|
264
290
|
"move.exists": "{0} 已存在。请先将其删除,或选择另一个名称。",
|
|
@@ -375,6 +401,9 @@
|
|
|
375
401
|
"pattern.typeOr": " 或",
|
|
376
402
|
"pattern.usualOnly": "仅限常规款",
|
|
377
403
|
"pattern.viaRole": "角色 {0}",
|
|
404
|
+
"result.addNeighbours": "加入相邻分支({0})",
|
|
405
|
+
"result.addNeighboursHint": "有些适配器把一个设备拆到并列分支里。此处会全部加入;要单独挑选,请在树中按住 Ctrl 单击。",
|
|
406
|
+
"result.addNeighboursSame": "按适配器的记录,这些分支属于同一台设备——相同的节点标识和相同的连接点。此处会全部加入;否则请按住 Ctrl 单击。",
|
|
378
407
|
"result.allAnyway": "反正都一样",
|
|
379
408
|
"result.channelsHint": "该设备有 {0} 个通道。请在以下选项中选择:将所有内容平铺到一个别名中,或者复制源结构——为该设备创建一个文件夹,并在其下方为每个通道分别创建一个子文件夹。",
|
|
380
409
|
"result.extraSwitches": "包含:来自其他通道的 {0} 个点,而 {1} 模式中没有对应的插槽。这些点虽然已创建,但不计入该设备的开关或反馈。如需单独控制,请使用下方的“每个通道一个设备”选项。",
|
|
@@ -405,18 +434,32 @@
|
|
|
405
434
|
"roles.slotTaken": "由 {0} 拍摄",
|
|
406
435
|
"swap.blocked": "首先做出决定——这些点无法同时存在:{0}。要么在交换过程中将其移除,要么保持交换状态不变;一个需要写入的点必须有一个写入目标。",
|
|
407
436
|
"swap.button": "交换源代码……",
|
|
437
|
+
"swap.byHandCheck": "公式、单位和取值范围保持别名上的原样——请事后核对。",
|
|
438
|
+
"swap.byHandHint": "这个数据点是你自己指定的——工作台无法从新设备推导出来。",
|
|
439
|
+
"swap.byHandMark": "手动",
|
|
408
440
|
"swap.diffRange": "范围 {0} → {1}",
|
|
409
441
|
"swap.diffType": "类型 {0} → {1}",
|
|
410
442
|
"swap.diffUnit": "unit {0} → {1}",
|
|
411
443
|
"swap.done": "已交换。该别名现在从 {0} 读取数据。",
|
|
444
|
+
"swap.factorField": "倍率",
|
|
445
|
+
"swap.formula": "公式",
|
|
446
|
+
"swap.formulaNone": "无",
|
|
412
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": "来自模板",
|
|
413
454
|
"swap.goHigher": "使用上一层",
|
|
414
455
|
"swap.gone": "该设备已不复存在——而这正是该工具的用途所在。",
|
|
415
456
|
"swap.guessHint": "标有“猜测”的行是根据姓名或角色进行匹配的——请逐一核对这些内容。",
|
|
457
|
+
"swap.guessedByAliasRole": "依据别名数据点的角色推测:新数据源下恰好有一个数据点的角色为“{0}”。请核对。",
|
|
416
458
|
"swap.guessedByName": "根据点名推测:新源下的某个内容也被称为“{0}”。这可能差得很远——请核实。",
|
|
417
459
|
"swap.guessedByRole": "根据角色推测:新来源下的一点具有相同的角色“{0}”。请核对。",
|
|
418
460
|
"swap.higherLevel": "向上一个级别({0})会找到一个目标,可获得{1}个{2}分,这里只有{3}分。",
|
|
419
461
|
"swap.keeps": "别名会保留其 ID、名称、角色和公式,以及数据库中的历史记录、所在房间和功能。唯一的变化在于每个数据点的读写位置。",
|
|
462
|
+
"swap.loadingValues": "正在读取新设备 …",
|
|
420
463
|
"swap.mapping": "映射",
|
|
421
464
|
"swap.mind": "请注意:",
|
|
422
465
|
"swap.mindHint": "别名公式保持不变——如果新数据源的缩放比例不同,后续的数值就会出错。该公式位于该点的详细信息行中。",
|
|
@@ -424,13 +467,27 @@
|
|
|
424
467
|
"swap.noMatch": "未找到匹配点",
|
|
425
468
|
"swap.noWriteMatch": "未找到写入目标——该点不会写入任何位置",
|
|
426
469
|
"swap.now": "立即兑换",
|
|
470
|
+
"swap.pickByHand": "… 或自行选择一个数据点",
|
|
427
471
|
"swap.pickFirst": "先选择一个新的来源。",
|
|
428
472
|
"swap.removeIt": "在交换时删除该点",
|
|
429
473
|
"swap.same": "这与之前的来源相同。",
|
|
430
474
|
"swap.search": "搜索(ID 或名称)……",
|
|
475
|
+
"swap.suggestionHint": "来自标注的建议——点击即填入字段。请对照上面的两个数值核对:标注可能是错的。",
|
|
431
476
|
"swap.title": "交换源",
|
|
432
477
|
"swap.to": "新来源",
|
|
478
|
+
"swap.tplDrop": "一并移除记住的模板({0} 个对象)",
|
|
479
|
+
"swap.tplFormulas": "{0} 个数据点的公式无论如何都会被新设备的公式取代——公式属于数据源,不属于别名。每一行都显示之后会是什么。",
|
|
480
|
+
"swap.tplGone": "该模板已不存在。",
|
|
481
|
+
"swap.tplOther": "另有一个模板与新数据源匹配:“{0}”。换源后可通过模板选择应用它——它会带来自己的公式和名称。",
|
|
482
|
+
"swap.tplStale": "记住的模板“{0}”与新数据源不匹配",
|
|
433
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}",
|
|
434
491
|
"swap.unknown": "(无法确定)",
|
|
435
492
|
"target.alsoRoom": "房间也设置为“{0}”吗?",
|
|
436
493
|
"target.alsoRoomNew": "没有“{0}”这个分区——要创建并分配它吗?",
|
|
@@ -574,11 +631,19 @@
|
|
|
574
631
|
"tpls.whichNumber": "此输出的数量",
|
|
575
632
|
"tpls.wissen": "+ {0} 个其他状态作为角色知识——用于“设备的全部数据点”视图",
|
|
576
633
|
"tree.aliases": "编辑别名",
|
|
634
|
+
"tree.branchAdd": "把该分支加入所选",
|
|
635
|
+
"tree.branchForeign": "这些分支不在同一个实例里。一个设备只在一个实例中——请选择有共同父节点的分支。",
|
|
636
|
+
"tree.branchHint": "有些适配器把一个设备拆到并列分支里——Matter 把开关放在一个分支、把计量放在另一个。多个分支合起来就是一个设备。与 Ctrl 单击相同。",
|
|
637
|
+
"tree.branchRemove": "把该分支移出所选",
|
|
577
638
|
"tree.collapseAll": "折叠全部",
|
|
578
639
|
"tree.emptyNode": "无数据点——该节点在数据库中存在,但为空",
|
|
579
640
|
"tree.expandAll": "展开全部",
|
|
641
|
+
"tree.exportMock": "导出为模拟设备",
|
|
642
|
+
"tree.exportMockHint": "将 {0} 之下的全部内容写入文件:对象和当前值,不含 native",
|
|
580
643
|
"tree.filter": "筛选……",
|
|
581
644
|
"tree.filterAria": "筛选对象",
|
|
645
|
+
"tree.importMock": "导入模拟设备 …",
|
|
646
|
+
"tree.importMockHint": "始终落在 {0} 之下——绝不写回原路径",
|
|
582
647
|
"tree.loading": "正在加载对象……",
|
|
583
648
|
"tree.looksLikeDevice": "看起来像是一个设备",
|
|
584
649
|
"tree.noObjectHint": "不是真正的文件夹",
|