From 4ece91a0fd0915964157ff93997f43f9cc891a0d Mon Sep 17 00:00:00 2001 From: nickAS21 Date: Fri, 21 Nov 2025 13:48:17 +0200 Subject: [PATCH 01/13] lwm2m: fix bug progileID is null after reboot if sleep --- .../server/client/LwM2mClientContextImpl.java | 2 +- .../ota/DefaultLwM2MOtaUpdateService.java | 58 ++++++++++--------- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/LwM2mClientContextImpl.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/LwM2mClientContextImpl.java index 4cf8d825b9..f5165f47c8 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/LwM2mClientContextImpl.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/LwM2mClientContextImpl.java @@ -360,7 +360,7 @@ public class LwM2mClientContextImpl implements LwM2mClientContext { @Override public Lwm2mDeviceProfileTransportConfiguration getProfile(Registration registration) { UUID profileId = getClientByEndpoint(registration.getEndpoint()).getProfileId(); - return doGetAndCache(profileId); + return profileId != null ? doGetAndCache(profileId) : null; } private Lwm2mDeviceProfileTransportConfiguration doGetAndCache(UUID profileId) { diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/ota/DefaultLwM2MOtaUpdateService.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/ota/DefaultLwM2MOtaUpdateService.java index 79f077a71e..325f1e2280 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/ota/DefaultLwM2MOtaUpdateService.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/ota/DefaultLwM2MOtaUpdateService.java @@ -201,35 +201,39 @@ public class DefaultLwM2MOtaUpdateService extends LwM2MExecutorAwareService impl } var clientSettings = clientContext.getProfile(client.getRegistration()).getClientLwM2mSettings(); - initFwStrategy(client, clientSettings); - initSwStrategy(client, clientSettings); - - if (!attributesToFetch.isEmpty()) { - var future = attributesService.getSharedAttributes(client, attributesToFetch); - DonAsynchron.withCallback(future, attrs -> { - if (fwInfo.isSupported()) { - Optional newFwTitle = getAttributeValue(attrs, FIRMWARE_TITLE); - Optional newFwVersion = getAttributeValue(attrs, FIRMWARE_VERSION); - Optional newFwTag = getAttributeValue(attrs, FIRMWARE_TAG); - Optional newFwUrl = getAttributeValue(attrs, FIRMWARE_URL); - if (newFwTitle.isPresent() && newFwVersion.isPresent() && !isOtaDownloading(client) && !UPDATING.equals(fwInfo.status)) { - onTargetFirmwareUpdate(client, newFwTitle.get(), newFwVersion.get(), newFwUrl, newFwTag); + if (clientSettings != null) { + initFwStrategy(client, clientSettings); + initSwStrategy(client, clientSettings); + + + if (!attributesToFetch.isEmpty()) { + var future = attributesService.getSharedAttributes(client, attributesToFetch); + DonAsynchron.withCallback(future, attrs -> { + if (fwInfo.isSupported()) { + Optional newFwTitle = getAttributeValue(attrs, FIRMWARE_TITLE); + Optional newFwVersion = getAttributeValue(attrs, FIRMWARE_VERSION); + Optional newFwTag = getAttributeValue(attrs, FIRMWARE_TAG); + Optional newFwUrl = getAttributeValue(attrs, FIRMWARE_URL); + if (newFwTitle.isPresent() && newFwVersion.isPresent() && !isOtaDownloading(client) && !UPDATING.equals(fwInfo.status)) { + onTargetFirmwareUpdate(client, newFwTitle.get(), newFwVersion.get(), newFwUrl, newFwTag); + } } - } - if (swInfo.isSupported()) { - Optional newSwTitle = getAttributeValue(attrs, SOFTWARE_TITLE); - Optional newSwVersion = getAttributeValue(attrs, SOFTWARE_VERSION); - Optional newSwTag = getAttributeValue(attrs, SOFTWARE_TAG); - Optional newSwUrl = getAttributeValue(attrs, SOFTWARE_URL); - if (newSwTitle.isPresent() && newSwVersion.isPresent()) { - onTargetSoftwareUpdate(client, newSwTitle.get(), newSwVersion.get(), newSwUrl, newSwTag); + if (swInfo.isSupported()) { + Optional newSwTitle = getAttributeValue(attrs, SOFTWARE_TITLE); + Optional newSwVersion = getAttributeValue(attrs, SOFTWARE_VERSION); + Optional newSwTag = getAttributeValue(attrs, SOFTWARE_TAG); + Optional newSwUrl = getAttributeValue(attrs, SOFTWARE_URL); + if (newSwTitle.isPresent() && newSwVersion.isPresent()) { + onTargetSoftwareUpdate(client, newSwTitle.get(), newSwVersion.get(), newSwUrl, newSwTag); + } } - } - }, throwable -> { - if (fwInfo.isSupported()) { - update(fwInfo); - } - }, executor); + + }, throwable -> { + if (fwInfo.isSupported()) { + update(fwInfo); + } + }, executor); + } } } From f398a81a429f1163107ace6c2e85d7aa13034445 Mon Sep 17 00:00:00 2001 From: nickAS21 Date: Fri, 21 Nov 2025 19:15:27 +0200 Subject: [PATCH 02/13] lwm2m: fix bug redis -> Cleaner if registration == null --- .../server/store/TbLwM2mRedisRegistrationStore.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2mRedisRegistrationStore.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2mRedisRegistrationStore.java index df432732b2..3c9828af22 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2mRedisRegistrationStore.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2mRedisRegistrationStore.java @@ -750,11 +750,14 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab System.currentTimeMillis(), 0, cleanLimit); for (byte[] endpoint : endpointsExpired) { - Registration r = deserializeReg(connection.get(toEndpointKey(endpoint))); - if (!r.isAlive(gracePeriod)) { - Deregistration dereg = removeRegistration(connection, r.getId(), true); - if (dereg != null) - expirationListener.registrationExpired(dereg.getRegistration(), dereg.getObservations()); + byte[] data = connection.get(toEndpointKey(endpoint)); + if (data != null && data.length > 0) { + Registration r = deserializeReg(data); + if (!r.isAlive(gracePeriod)) { + Deregistration dereg = removeRegistration(connection, r.getId(), true); + if (dereg != null) + expirationListener.registrationExpired(dereg.getRegistration(), dereg.getObservations()); + } } } } catch (Exception e) { From d5b9e39f685ceb6b805be7966c0fbd063ecb27b6 Mon Sep 17 00:00:00 2001 From: Maksym Tsymbarov Date: Thu, 11 Dec 2025 12:24:21 +0200 Subject: [PATCH 03/13] Fixed profile saves triggers the saved device configuration without changes --- .../home/models/entity/entities-table-config.models.ts | 4 ++-- .../home/models/entity/entity-table-component.models.ts | 2 +- ui-ngx/src/app/modules/home/pages/asset/asset.component.ts | 2 +- ui-ngx/src/app/modules/home/pages/device/device.component.ts | 2 +- ui-ngx/src/app/modules/home/pages/tenant/tenant.component.ts | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ui-ngx/src/app/modules/home/models/entity/entities-table-config.models.ts b/ui-ngx/src/app/modules/home/models/entity/entities-table-config.models.ts index 5117aa6430..75c821cfcf 100644 --- a/ui-ngx/src/app/modules/home/models/entity/entities-table-config.models.ts +++ b/ui-ngx/src/app/modules/home/models/entity/entities-table-config.models.ts @@ -236,9 +236,9 @@ export class EntityTableConfig, P extends PageLink = P this.table = null; } - updateData(closeDetails = false) { + updateData(closeDetails = false, reloadEntity = true) { if (this.table) { - this.table.updateData(closeDetails); + this.table.updateData(closeDetails, reloadEntity); } else if (this.entityDetailsPage) { this.entityDetailsPage.reload(); } diff --git a/ui-ngx/src/app/modules/home/models/entity/entity-table-component.models.ts b/ui-ngx/src/app/modules/home/models/entity/entity-table-component.models.ts index 6317f267ca..e3d0bb19e6 100644 --- a/ui-ngx/src/app/modules/home/models/entity/entity-table-component.models.ts +++ b/ui-ngx/src/app/modules/home/models/entity/entity-table-component.models.ts @@ -68,7 +68,7 @@ export interface IEntitiesTableComponent { addEnabled(): boolean; clearSelection(): void; - updateData(closeDetails?: boolean): void; + updateData(closeDetails?: boolean, reloadEntity?: boolean): void; onRowClick($event: Event, entity): void; toggleEntityDetails($event: Event, entity); addEntity($event: Event): void; diff --git a/ui-ngx/src/app/modules/home/pages/asset/asset.component.ts b/ui-ngx/src/app/modules/home/pages/asset/asset.component.ts index 346f310d47..d89068284e 100644 --- a/ui-ngx/src/app/modules/home/pages/asset/asset.component.ts +++ b/ui-ngx/src/app/modules/home/pages/asset/asset.component.ts @@ -100,6 +100,6 @@ export class AssetComponent extends EntityComponent { } onAssetProfileUpdated() { - this.entitiesTableConfig.updateData(false); + this.entitiesTableConfig.updateData(false,false); } } diff --git a/ui-ngx/src/app/modules/home/pages/device/device.component.ts b/ui-ngx/src/app/modules/home/pages/device/device.component.ts index 85c3ae8a2c..1886962b6b 100644 --- a/ui-ngx/src/app/modules/home/pages/device/device.component.ts +++ b/ui-ngx/src/app/modules/home/pages/device/device.component.ts @@ -142,7 +142,7 @@ export class DeviceComponent extends EntityComponent { } onDeviceProfileUpdated() { - this.entitiesTableConfig.updateData(false); + this.entitiesTableConfig.updateData(false, false); } onDeviceProfileChanged(deviceProfile: DeviceProfileInfo) { diff --git a/ui-ngx/src/app/modules/home/pages/tenant/tenant.component.ts b/ui-ngx/src/app/modules/home/pages/tenant/tenant.component.ts index 711075885a..e18b28e263 100644 --- a/ui-ngx/src/app/modules/home/pages/tenant/tenant.component.ts +++ b/ui-ngx/src/app/modules/home/pages/tenant/tenant.component.ts @@ -101,6 +101,6 @@ export class TenantComponent extends ContactBasedComponent { } onTenantProfileUpdated() { - this.entitiesTableConfig.updateData(false); + this.entitiesTableConfig.updateData(false, false); } } From 65073afc0d7a1b0ca7a859c0439e8b26d214d520 Mon Sep 17 00:00:00 2001 From: Vladyslav Prykhodko Date: Thu, 11 Dec 2025 13:33:56 +0200 Subject: [PATCH 04/13] Update style asset.component.ts --- ui-ngx/src/app/modules/home/pages/asset/asset.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/pages/asset/asset.component.ts b/ui-ngx/src/app/modules/home/pages/asset/asset.component.ts index d89068284e..50023cb78c 100644 --- a/ui-ngx/src/app/modules/home/pages/asset/asset.component.ts +++ b/ui-ngx/src/app/modules/home/pages/asset/asset.component.ts @@ -100,6 +100,6 @@ export class AssetComponent extends EntityComponent { } onAssetProfileUpdated() { - this.entitiesTableConfig.updateData(false,false); + this.entitiesTableConfig.updateData(false, false); } } From 5a6a2a3665df41cddafabdea28b75f5d015e193f Mon Sep 17 00:00:00 2001 From: Viacheslav Klimov Date: Thu, 11 Dec 2025 14:14:10 +0200 Subject: [PATCH 05/13] Fix and improve CF states restore --- ...CalculatedFieldEntityMessageProcessor.java | 1 + ...alculatedFieldManagerMessageProcessor.java | 7 ++-- .../CalculatedFieldStateRestoreMsg.java | 2 ++ .../server/actors/tenant/TenantActor.java | 25 ++++++++----- .../AbstractCalculatedFieldStateService.java | 8 ++--- .../KafkaCalculatedFieldStateService.java | 36 +++++++++++++++---- .../RocksDBCalculatedFieldStateService.java | 15 ++++++-- 7 files changed, 71 insertions(+), 23 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldEntityMessageProcessor.java b/application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldEntityMessageProcessor.java index a905738a2f..49d1af2b0f 100644 --- a/application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldEntityMessageProcessor.java +++ b/application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldEntityMessageProcessor.java @@ -112,6 +112,7 @@ public class CalculatedFieldEntityMessageProcessor extends AbstractContextAwareM } else { states.remove(cfId); } + msg.getCallback().onSuccess(); } public void process(EntityInitCalculatedFieldMsg msg) throws CalculatedFieldException { diff --git a/application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldManagerMessageProcessor.java b/application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldManagerMessageProcessor.java index 590e097928..b8bc74db7a 100644 --- a/application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldManagerMessageProcessor.java +++ b/application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldManagerMessageProcessor.java @@ -125,10 +125,13 @@ public class CalculatedFieldManagerMessageProcessor extends AbstractContextAware if (msg.getState() != null) { msg.getState().setRequiredArguments(calculatedField.getArgNames()); } - log.debug("Pushing CF state restore msg to specific actor [{}]", msg.getId().entityId()); + log.debug("[{}] Pushing CF state restore msg to specific actor [{}]", tenantId, msg.getId().entityId()); getOrCreateActor(msg.getId().entityId()).tell(msg); - } else { + } else if (msg.getState() != null) { + log.debug("[{}] Received CF state restore msg for non-existing CF [{}]. Removing state", tenantId, cfId); cfStateService.removeState(msg.getId(), msg.getCallback()); + } else { + msg.getCallback().onSuccess(); } } diff --git a/application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldStateRestoreMsg.java b/application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldStateRestoreMsg.java index 19be7c02fa..fbe666c662 100644 --- a/application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldStateRestoreMsg.java +++ b/application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldStateRestoreMsg.java @@ -19,6 +19,7 @@ import lombok.Data; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.msg.MsgType; import org.thingsboard.server.common.msg.ToCalculatedFieldSystemMsg; +import org.thingsboard.server.common.msg.queue.TbCallback; import org.thingsboard.server.service.cf.ctx.CalculatedFieldEntityCtxId; import org.thingsboard.server.service.cf.ctx.state.CalculatedFieldState; @@ -27,6 +28,7 @@ public class CalculatedFieldStateRestoreMsg implements ToCalculatedFieldSystemMs private final CalculatedFieldEntityCtxId id; private final CalculatedFieldState state; + private final TbCallback callback; @Override public MsgType getMsgType() { diff --git a/application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java b/application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java index 91d25a633b..fa17c0ca2c 100644 --- a/application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java +++ b/application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java @@ -43,7 +43,6 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent; import org.thingsboard.server.common.data.rule.RuleChain; import org.thingsboard.server.common.data.rule.RuleChainType; -import org.thingsboard.server.common.msg.MsgType; import org.thingsboard.server.common.msg.TbActorMsg; import org.thingsboard.server.common.msg.TbActorStopReason; import org.thingsboard.server.common.msg.TbMsg; @@ -138,13 +137,22 @@ public class TenantActor extends RuleChainManagerActor { @Override protected boolean doProcess(TbActorMsg msg) { if (cantFindTenant) { - log.info("[{}] Processing missing Tenant msg: {}", tenantId, msg); - if (msg.getMsgType().equals(MsgType.QUEUE_TO_RULE_ENGINE_MSG)) { - QueueToRuleEngineMsg queueMsg = (QueueToRuleEngineMsg) msg; - queueMsg.getMsg().getCallback().onSuccess(); - } else if (msg.getMsgType().equals(MsgType.TRANSPORT_TO_DEVICE_ACTOR_MSG)) { - TransportToDeviceActorMsgWrapper transportMsg = (TransportToDeviceActorMsgWrapper) msg; - transportMsg.getCallback().onSuccess(); + log.debug("[{}] Processing message for non-existing tenant: {}", tenantId, msg); + switch (msg.getMsgType()) { + case QUEUE_TO_RULE_ENGINE_MSG -> { + ((QueueToRuleEngineMsg) msg).getMsg().getCallback().onSuccess(); + } + case TRANSPORT_TO_DEVICE_ACTOR_MSG -> { + ((TransportToDeviceActorMsgWrapper) msg).getCallback().onSuccess(); + } + case CF_STATE_RESTORE_MSG -> { + ((CalculatedFieldStateRestoreMsg) msg).getCallback().onSuccess(); + } + default -> { + if (!log.isDebugEnabled()) { + log.info("[{}] Processing message for non-existing tenant: {}", tenantId, msg); + } + } } return true; } @@ -390,6 +398,7 @@ public class TenantActor extends RuleChainManagerActor { public TbActor createActor() { return new TenantActor(context, tenantId); } + } } diff --git a/application/src/main/java/org/thingsboard/server/service/cf/AbstractCalculatedFieldStateService.java b/application/src/main/java/org/thingsboard/server/service/cf/AbstractCalculatedFieldStateService.java index 70b41f069e..87bdda2b30 100644 --- a/application/src/main/java/org/thingsboard/server/service/cf/AbstractCalculatedFieldStateService.java +++ b/application/src/main/java/org/thingsboard/server/service/cf/AbstractCalculatedFieldStateService.java @@ -62,14 +62,14 @@ public abstract class AbstractCalculatedFieldStateService implements CalculatedF protected abstract void doRemove(CalculatedFieldEntityCtxId stateId, TbCallback callback); - protected void processRestoredState(CalculatedFieldStateProto stateMsg) { + protected void processRestoredState(CalculatedFieldStateProto stateMsg, TbCallback callback) { var id = fromProto(stateMsg.getId()); var state = fromProto(stateMsg); - processRestoredState(id, state); + processRestoredState(id, state, callback); } - protected void processRestoredState(CalculatedFieldEntityCtxId id, CalculatedFieldState state) { - actorSystemContext.tell(new CalculatedFieldStateRestoreMsg(id, state)); + protected void processRestoredState(CalculatedFieldEntityCtxId id, CalculatedFieldState state, TbCallback callback) { + actorSystemContext.tell(new CalculatedFieldStateRestoreMsg(id, state, callback)); } @Override diff --git a/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/KafkaCalculatedFieldStateService.java b/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/KafkaCalculatedFieldStateService.java index 2b52892744..2773e13fa3 100644 --- a/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/KafkaCalculatedFieldStateService.java +++ b/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/KafkaCalculatedFieldStateService.java @@ -43,6 +43,8 @@ import org.thingsboard.server.queue.provider.TbRuleEngineQueueFactory; import org.thingsboard.server.service.cf.AbstractCalculatedFieldStateService; import org.thingsboard.server.service.cf.ctx.CalculatedFieldEntityCtxId; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import static org.thingsboard.server.queue.common.AbstractTbQueueTemplate.bytesToString; @@ -61,6 +63,8 @@ public class KafkaCalculatedFieldStateService extends AbstractCalculatedFieldSta @Value("${queue.calculated_fields.poll_interval:25}") private long pollInterval; + @Value("${queue.calculated_fields.pack_processing_timeout:60000}") + private long packProcessingTimeout; private TbKafkaProducerTemplate> stateProducer; @@ -74,21 +78,39 @@ public class KafkaCalculatedFieldStateService extends AbstractCalculatedFieldSta .topic(partitionService.getTopic(queueKey)) .pollInterval(pollInterval) .msgPackProcessor((msgs, consumer, consumerKey, config) -> { + CountDownLatch completionLatch = new CountDownLatch(msgs.size()); for (TbProtoQueueMsg msg : msgs) { + TbCallback callback = new TbCallback() { + @Override + public void onSuccess() { + int processedMsgCount = counter.incrementAndGet(); + if (processedMsgCount % 10000 == 0) { + log.info("Processed {} CF state messages", processedMsgCount); + } + completionLatch.countDown(); + } + + @Override + public void onFailure(Throwable t) { + log.error("Failed to process CF state message: {}", msg, t); + completionLatch.countDown(); + } + }; + try { if (msg.getValue() != null) { - processRestoredState(msg.getValue()); + processRestoredState(msg.getValue(), callback); } else { - processRestoredState(getStateId(msg.getHeaders()), null); + processRestoredState(getStateId(msg.getHeaders()), null, callback); } } catch (Throwable t) { - log.error("Failed to process state message: {}", msg, t); + callback.onFailure(t); } + } - int processedMsgCount = counter.incrementAndGet(); - if (processedMsgCount % 10000 == 0) { - log.info("Processed {} calculated field state msgs", processedMsgCount); - } + boolean success = completionLatch.await(packProcessingTimeout, TimeUnit.MILLISECONDS); + if (!success) { + log.error("Timeout to process CF state messages pack of size {}", msgs.size()); } }) .consumerCreator((queueConfig, tpi) -> queueFactory.createCalculatedFieldStateConsumer()) diff --git a/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/RocksDBCalculatedFieldStateService.java b/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/RocksDBCalculatedFieldStateService.java index 9dc6139ca5..d99689f4ee 100644 --- a/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/RocksDBCalculatedFieldStateService.java +++ b/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/RocksDBCalculatedFieldStateService.java @@ -63,11 +63,22 @@ public class RocksDBCalculatedFieldStateService extends AbstractCalculatedFieldS public void restore(QueueKey queueKey, Set partitions) { if (stateService.getPartitions().isEmpty()) { cfRocksDb.forEach((key, value) -> { + CalculatedFieldStateProto stateMsg; try { - processRestoredState(CalculatedFieldStateProto.parseFrom(value)); + stateMsg = CalculatedFieldStateProto.parseFrom(value); } catch (InvalidProtocolBufferException e) { - log.error("[{}] Failed to process restored state", key, e); + log.error("Failed to parse CalculatedFieldStateProto for key {}", key, e); + return; } + processRestoredState(stateMsg, new TbCallback() { + @Override + public void onSuccess() {} + + @Override + public void onFailure(Throwable t) { + log.error("Failed to process CF state message: {}", stateMsg, t); + } + }); }); } super.restore(queueKey, partitions); From 73b104c15765b1a534354be49cde1d423017a7e5 Mon Sep 17 00:00:00 2001 From: Vladyslav_Prykhodko Date: Thu, 11 Dec 2025 15:31:06 +0200 Subject: [PATCH 06/13] Updated translation --- .../assets/locale/locale.constant-da_DK.json | 515 +++--- .../assets/locale/locale.constant-de_DE.json | 365 ++-- .../assets/locale/locale.constant-el_GR.json | 681 ++++---- .../assets/locale/locale.constant-fr_FR.json | 1449 ++++++++-------- .../assets/locale/locale.constant-it_IT.json | 1084 ++++++++---- .../assets/locale/locale.constant-nl_NL.json | 1515 ++++++++++------- 6 files changed, 3214 insertions(+), 2395 deletions(-) diff --git a/ui-ngx/src/assets/locale/locale.constant-da_DK.json b/ui-ngx/src/assets/locale/locale.constant-da_DK.json index 624053b088..c0554d1cca 100644 --- a/ui-ngx/src/assets/locale/locale.constant-da_DK.json +++ b/ui-ngx/src/assets/locale/locale.constant-da_DK.json @@ -875,14 +875,14 @@ "data-points-storage-days": "Opbevaringsdage for datapunkter", "device-api": "Enheds-API", "email": "E-mail", - "email-messages": "E-mailbeskeder", - "email-messages-daily-activity": "Daglig aktivitet for e-mailbeskeder", - "email-messages-monthly-activity": "Månedlig aktivitet for e-mailbeskeder", + "email-messages": "E-mail-beskeder", + "email-messages-daily-activity": "Daglig aktivitet for e-mail-beskeder", + "email-messages-monthly-activity": "Månedlig aktivitet for e-mail-beskeder", "executions": "Udførelser", "scripts": "Scripts", - "scripts-hourly-activity": "Timebaseret aktivitet for scripts", - "scripts-daily-activity": "Daglig aktivitet for scripts", - "scripts-monthly-activity": "Månedlig aktivitet for scripts", + "scripts-hourly-activity": "Scriptaktivitet pr. time", + "scripts-daily-activity": "Scriptaktivitet pr. dag", + "scripts-monthly-activity": "Scriptaktivitet pr. måned", "javascript": "JavaScript", "javascript-executions": "JavaScript-udførelser", "tbel": "TBEL", @@ -1002,15 +1002,15 @@ "type-sms-sent": "SMS sendt" }, "debug-settings": { - "label": "Fejlsøgningskonfiguration", + "label": "Fejlfindingskonfiguration", "on-failure": "Kun fejl (24/7)", "all-messages": "Alle beskeder ({{time}})", "failures": "Fejl", "entity": "enhed", "hint": { - "main-limited": "Alle {{entity}} fejlsøgningsbeskeder vil blive hastighedsbegrænset, med maksimalt {{msg}} beskeder tilladt pr. {{time}}.", - "on-failure": "Gem alle fejlsøgningshændelser uden tidsbegrænsning.", - "all-messages": "Gem alle fejlsøgningshændelser i en tidsbegrænset periode." + "main-limited": "Der vil blive logget højst {{msg}} {{entity}} fejlfindingsbeskeder pr. {{time}}.", + "on-failure": "Log kun fejlbeskeder.", + "all-messages": "Log alle fejlfindingsbeskeder." } }, "calculated-fields": { @@ -1111,13 +1111,15 @@ "mistral-ai": "Mistral AI", "anthropic": "Anthropic", "amazon-bedrock": "Amazon Bedrock", - "github-models": "GitHub-modeller" + "github-models": "GitHub-modeller", + "ollama": "Ollama" }, "name-required": "Navn er påkrævet.", "name-max-length": "Navn må højst være 255 tegn.", "provider": "Udbyder", "api-key": "API-nøgle", "api-key-required": "API-nøgle er påkrævet.", + "api-key-open-ai-required": "API-nøgle er påkrævet ved brug af den officielle OpenAI API.", "project-id": "Projekt-ID", "project-id-required": "Projekt-ID er påkrævet", "location": "Placering", @@ -1152,19 +1154,36 @@ "presence-penalty": "Tilstedeværelsesstraf", "presence-penalty-hint": "Påfører en fast straf på sandsynligheden for et token, hvis det allerede er optrådt i teksten.", "frequency-penalty": "Frekvensstraf", - "frequency-penalty-hint": "Påfører en straf på et tokens sandsynlighed, som stiger baseret på dets hyppighed i teksten.", - "max-output-tokens": "Maksimalt outputtokens", - "max-output-tokens-min": "Skal være større end 0.", - "max-output-tokens-hint": "Angiver det maksimale antal tokens, som modellen kan generere i ét svar.", + "frequency-penalty-hint": "Anvender en straf på sandsynligheden for et token, som stiger afhængigt af dets hyppighed i teksten.", + "max-output-tokens": "Maksimalt antal output-tokens", + "max-output-tokens-hint": "Angiver det maksimale antal tokens, som \nmodellen kan generere i ét svar.", + "context-length": "Kontekstens længde", + "context-length-hint": "Definerer størrelsen på kontekstvinduet i tokens. Denne værdi angiver den samlede hukommelsesgrænse for modellen, inklusiv både brugerens input og det genererede svar.", "endpoint": "Endpoint", "endpoint-required": "Endpoint er påkrævet.", + "baseurl": "Base-URL", + "baseurl-required": "Base-URL er påkrævet.", "service-version": "Serviceversion", "check-connectivity": "Tjek forbindelsen", - "check-connectivity-success": "Testanmodningen var vellykket", + "check-connectivity-success": "Testanmodningen blev gennemført med succes", "check-connectivity-failed": "Testanmodningen mislykkedes", "no-model-matching": "Ingen modeller, der matcher '{{entity}}', blev fundet.", "model-required": "Model er påkrævet.", - "no-model-text": "Ingen modeller fundet." + "no-model-text": "Ingen modeller fundet.", + "authentication": "Godkendelse", + "authentication-basic-hint": "Bruger standard HTTP Basic-godkendelse. Brugernavn og adgangskode kombineres, Base64-kodes og sendes i en \"Authorization\"-header med hver anmodning til Ollama-serveren.", + "authentication-token-hint": "Bruger Bearer-token-godkendelse. Det angivne token sendes direkte i en \"Authorization\"-header med hver anmodning til Ollama-serveren.", + "authentication-type": { + "none": "Ingen", + "basic": "Basic", + "token": "Token" + }, + "username": "Brugernavn", + "username-required": "Brugernavn er påkrævet.", + "password": "Adgangskode", + "password-required": "Adgangskode er påkrævet.", + "token": "Token", + "token-required": "Token er påkrævet." }, "confirm-on-exit": { "message": "Du har ikke gemte ændringer. Er du sikker på, at du vil forlade denne side?", @@ -2237,12 +2256,12 @@ "tqs": "TQS: Både TCP og SMS aktive; TCP i køtilstand, SMS i standardtilstand (ikke understøttet fra LWM2M 1.1)", "sq": "SQ: SMS i køtilstand (ikke understøttet fra LWM2M 1.1)" }, - "binding-tooltip": "Angiver understøttede bindingstyper i klienten (/1/x/7). Bør matche værdien i “Supported Binding and Modes” i enhedsobjektet (/3/0/16). Kun én transportbinding kan bruges per session.", + "binding-tooltip": "Dette er listen i \"binding\"-ressourcen for LwM2M-serverobjektet – /1/x/7.\nAngiver de understøttede bindingstilstande i LwM2M-klienten.\nDenne værdi BØR være den samme som værdien i ressourcen \"Supported Binding and Modes\" i enhedsobjektet (/3/0/16).\nSelvom flere transportmetoder understøttes, kan kun én transportbinding anvendes under hele transportsessionen.\nFor eksempel, når både UDP og SMS understøttes, kan LwM2M-klienten og LwM2M-serveren vælge at kommunikere enten via UDP eller SMS under hele transportsessionen.", "bootstrap-server": "Bootstrap-server", "lwm2m-server": "LwM2M-server", - "include-bootstrap-server": "Inkluder Bootstrap Server-opdateringer", - "bootstrap-update-title": "Du har allerede konfigureret Bootstrap-server. Er du sikker på, at du vil udelukke opdateringerne?", - "bootstrap-update-text": "Vær forsigtig, efter bekræftelse vil Bootstrap Server-konfigurationen ikke kunne gendannes.", + "include-bootstrap-server": "Inkludér opdateringer til Bootstrap-server", + "bootstrap-update-title": "Du har allerede konfigureret en Bootstrap-server. Er du sikker på, at du vil udelukke opdateringerne?", + "bootstrap-update-text": "Vær opmærksom på, at efter bekræftelse vil konfigurationsdataene for Bootstrap-serveren ikke kunne gendannes.", "server-host": "Host", "server-host-required": "Host er påkrævet.", "server-port": "Port", @@ -4308,8 +4327,8 @@ "current-password": "Nuværende adgangskode", "copy-jwt-token": "Kopiér JWT-token", "jwt-token": "JWT-token", - "token-valid-till": "Token er gyldig til", - "tokenCopiedSuccessMessage": "JWT-token er kopieret til udklipsholderen", + "token-valid-till": "Token er gyldig indtil", + "tokenCopiedSuccessMessage": "JWT-token er blevet kopieret til udklipsholderen", "tokenCopiedWarnMessage": "JWT-token er udløbet! Opdater venligst siden." }, "profiles": { @@ -4476,17 +4495,23 @@ "title-max-length": "Titel skal være mindre end 256 tegn", "type": { "jks": "JKS", - "js-module": "JS modul", - "lwm2m-model": "LWM2M model", - "pkcs-12": "PKCS #12" + "js-module": "JS-modul", + "lwm2m-model": "LWM2M-model", + "pkcs-12": "PKCS #12", + "general": "Generelt" }, "resource-sub-type": "Undertype", "sub-type": { "image": "billede", - "scada-symbol": "Scada symbol", + "scada-symbol": "SCADA-symbol", "extension": "Udvidelse", "module": "Modul" - } + }, + "resource-is-in-use": "Ressourcen bruges af andre entiteter", + "resources-are-in-use": "Ressourcerne bruges af andre entiteter", + "resource-is-in-use-text": "Ressourcen '{{title}}' blev ikke slettet, fordi den bruges af følgende entiteter:", + "resources-are-in-use-text": "Ikke alle ressourcer blev slettet, fordi de bruges af andre entiteter.
Du kan se de refererede entiteter ved at klikke på knappen Referencer i den tilsvarende ressource-række.
Hvis du stadig ønsker at slette disse ressourcer, skal du vælge dem i tabellen nedenfor og klikke på knappen Slet valgte.", + "delete-resource-in-use-text": "Hvis du stadig ønsker at slette ressourcen, skal du klikke på knappen Slet alligevel." }, "javascript": { "add": "Tilføj JavaScript-ressource", @@ -4700,13 +4725,13 @@ "customer-cache-expiration-hint": "Angiver maksimumsinterval for gemte kundedata. 0 = aldrig udløber.", "customer-cache-expiration-required": "Cache udløbstid for kunder er påkrævet.", "customer-cache-expiration-range": "Udløbstiden skal være ≥ 0.", - "interval-start": "Interval start", - "interval-end": "Interval slut", + "interval-start": "Start af interval", + "interval-end": "Intervalslut", "time-unit": "Tidsenhed", - "fetch-mode": "Hentetilstand", + "fetch-mode": "Hentemåde", "order-by-timestamp": "Sorter efter tidsstempel", "limit": "Grænse", - "limit-hint": "Min: 2, maks: 1000. Vælg 'First' eller 'Last' for én post.", + "limit-hint": "Min. grænseværdi er 2, maks. 1000. Hvis du vil hente én enkelt post, skal du vælge hentemåde 'Første' eller 'Sidste'.", "limit-required": "Grænse er påkrævet.", "limit-range": "Grænsen skal være mellem 2 og 1000.", "time-unit-milliseconds": "Millisekunder", @@ -4714,9 +4739,9 @@ "time-unit-minutes": "Minutter", "time-unit-hours": "Timer", "time-unit-days": "Dage", - "time-value-range": "Værdien skal være mellem 1 og 2147483647.", - "start-interval-value-required": "Interval start er påkrævet.", - "end-interval-value-required": "Interval slut er påkrævet.", + "time-value-range": "Tilladt område er fra 1 til 2147483647.", + "start-interval-value-required": "Intervalstart er påkrævet.", + "end-interval-value-required": "Intervalslut er påkrævet.", "filter": "Filter", "switch": "Skift", "math-templatization-tooltip": "Understøtter templatisering via $[messageKey] og ${metadataKey}.", @@ -4759,7 +4784,7 @@ "copy-from": "Kopiér fra", "data-to-metadata": "Data til metadata", "metadata-to-data": "Metadata til data", - "use-regular-expression-hint": "Brug regulært udtryk for at kopiere nøgler efter mønster.\n\nTips:\nTryk 'Enter' for at bekræfte feltinput.\nTryk 'Backspace' for at slette felt. Flere felter understøttes.", + "use-regular-expression-hint": "Brug regulært udtryk til at kopiere nøgler efter mønster.\n\nTips og tricks:\nTryk på 'Enter' for at fuldføre indtastning af feltnavn.\nTryk på 'Backspace' for at slette feltnavn. Flere feltnavne understøttes.", "interval": "Interval", "interval-required": "Interval er påkrævet", "interval-hint": "Dedupliceringsinterval i sekunder.", @@ -4812,7 +4837,7 @@ "latest-telemetry": "Seneste telemetri", "add-telemetry-key": "Tilføj telemetrinøgle", "delete-from": "Slet fra", - "use-regular-expression-delete-hint": "Brug regulært udtryk til sletning efter mønster.\n\nTips:\nTryk 'Enter' for at bekræfte.\nTryk 'Backspace' for at slette.", + "use-regular-expression-delete-hint": "Brug regulært udtryk til at slette nøgler efter mønster.\n\nTips og tricks:\nTryk på 'Enter' for at afslutte feltindtastning.\nTryk på 'Backspace' for at slette feltnavn.\nFlere feltnavne understøttes.", "fetch-into": "Hent til", "attr-mapping": "Attributmapping:", "source-attribute": "Kildeattribut", @@ -4823,11 +4848,11 @@ "target-key-required": "Målnøgle er påkrævet.", "attr-mapping-required": "Mindst én mapping skal angives.", "fields-mapping": "Feltermapping", - "fields-mapping-hint": "Brug $entityId for at gemme afsenderens id.", + "fields-mapping-hint": "Hvis beskedfeltet er sat til $entityId, vil oprindelses-id for beskeden blive gemt i den angivne tabelkolonne.", "relations-query-config-direction-suffix": "afsender", "profile-name": "Profilnavn", - "fetch-circle-parameter-info-from-metadata-hint": "Metadatafelt '{{perimeterKeyName}}' skal være i formatet: {\"latitude\":48.196, \"longitude\":24.6532, \"radius\":100.0, \"radiusUnit\":\"METER\"}", - "fetch-poligon-parameter-info-from-metadata-hint": "Metadatafelt '{{perimeterKeyName}}' skal være i formatet: [[48.19736,24.65235],...]", + "fetch-circle-parameter-info-from-metadata-hint": "Metadatafeltet '{{perimeterKeyName}}' skal være i følgende format: {\"latitude\":48.196, \"longitude\":24.6532, \"radius\":100.0, \"radiusUnit\":\"METER\"}", + "fetch-poligon-parameter-info-from-metadata-hint": "Metadatafeltet '{{perimeterKeyName}}' skal være i følgende format: [[48.19736,24.65235],[48.19800,24.65060],...,[48.19849,24.65420]]", "short-templatization-tooltip": "Brug $[messageKey] og ${metadataKey} til at hente værdier.", "fields-mapping-required": "Mindst én feltmapping er påkrævet.", "at-least-one-field-required": "Mindst ét inputfelt skal have en værdi.", @@ -4918,8 +4943,8 @@ "mail-body-type": "Indholdstype", "body-type-template": "Indholdstypemønster", "reply-routing-configuration": "Svarrute-konfiguration", - "rpc-reply-routing-configuration-hint": "Konfiguration for at identificere tjeneste, session og anmodning i metadata.", - "reply-routing-configuration-hint": "Konfiguration for at identificere tjeneste og anmodning i metadata.", + "rpc-reply-routing-configuration-hint": "Disse konfigurationsparametre angiver metadata-nøglenavne, der bruges til at identificere tjenesten, sessionen og anmodningen til at sende et svar tilbage.", + "reply-routing-configuration-hint": "Disse konfigurationsparametre angiver metadata-nøglenavne, der bruges til at identificere tjenesten og anmodningen til at sende et svar tilbage.", "request-id-metadata-attribute": "Anmodnings-id", "service-id-metadata-attribute": "Tjeneste-id", "session-id-metadata-attribute": "Session-id", @@ -4947,7 +4972,7 @@ "value-required": "Værdi er påkrævet", "topic-pattern": "Emnemønster", "key-pattern": "Nøglemønster", - "key-pattern-hint": "Valgfri. Angiv partition eller nøgle til brug ved sending.", + "key-pattern-hint": "Valgfrit. Hvis et gyldigt partitionsnummer er angivet, vil det blive brugt ved afsendelse af posten. Hvis ingen partition er angivet, vil nøglen blive brugt i stedet. Hvis ingen af delene er angivet, tildeles en partition i en round-robin-rækkefølge.", "topic-pattern-required": "Emnemønster er påkrævet", "topic": "Emne", "topic-required": "Emne er påkrævet", @@ -4956,18 +4981,18 @@ "other-properties": "Andre egenskaber", "key": "Nøgle", "key-required": "Nøgle er påkrævet", - "retries": "Antal genforsøg ved fejl", - "min-retries-message": "Kun 0 genforsøg tilladt som minimum", - "batch-size-bytes": "Batchstørrelse i bytes", - "min-batch-size-bytes-message": "Minimum batchstørrelse er 0", - "linger-ms": "Buffer-tid lokalt (ms)", - "min-linger-ms-message": "Minimum 0 ms tilladt", - "buffer-memory-bytes": "Maks. bufferstørrelse (bytes)", - "min-buffer-memory-message": "Minimum bufferstørrelse er 0", - "memory-buffer-size-range": "Bufferstørrelse skal være mellem 0 og {{max}} KB", - "acks": "Antal kvitteringer", - "topic-arn-pattern": "ARN-emnemønster", - "topic-arn-pattern-required": "ARN-emnemønster er påkrævet", + "retries": "Antal automatiske forsøg ved fejl", + "min-retries-message": "Kun 0 som minimumsantal forsøg er tilladt.", + "batch-size-bytes": "Batchstørrelse ved afsendelse (i bytes)", + "min-batch-size-bytes-message": "Kun 0 som minimum batchstørrelse er tilladt.", + "linger-ms": "Tidsbuffer lokalt (ms)", + "min-linger-ms-message": "Kun 0 ms som minimumværdi er tilladt.", + "buffer-memory-bytes": "Maksimal klientbufferstørrelse (i bytes)", + "min-buffer-memory-message": "Kun 0 som minimum bufferstørrelse er tilladt.", + "memory-buffer-size-range": "Bufferstørrelsen skal være mellem 0 og {{max}} KB", + "acks": "Antal bekræftelser", + "topic-arn-pattern": "Emne-ARN-mønster", + "topic-arn-pattern-required": "Emne-ARN-mønster er påkrævet", "aws-access-key-id": "AWS Access Key ID", "aws-access-key-id-required": "AWS Access Key ID er påkrævet", "aws-secret-access-key": "AWS Secret Access Key", @@ -4987,35 +5012,35 @@ "password": "Adgangskode", "automatic-recovery": "Automatisk gendannelse", "connection-timeout-ms": "Forbindelsestimeout (ms)", - "min-connection-timeout-ms-message": "Minimum værdi er 0 ms", - "handshake-timeout-ms": "Handshake-timeout (ms)", - "min-handshake-timeout-ms-message": "Minimum værdi er 0 ms", + "min-connection-timeout-ms-message": "Kun 0 ms som minimumværdi er tilladt.", + "handshake-timeout-ms": "Tidsgrænse for håndtryk (ms)", + "min-handshake-timeout-ms-message": "Kun 0 ms som minimumværdi er tilladt.", "client-properties": "Klientegenskaber", - "queue-url-pattern": "Kø-URL mønster", - "queue-url-pattern-required": "Kø-URL mønster er påkrævet", + "queue-url-pattern": "Køens URL-mønster", + "queue-url-pattern-required": "Køens URL-mønster er påkrævet", "delay-seconds": "Forsinkelse (sekunder)", - "min-delay-seconds-message": "Minimum forsinkelse er 0 sekunder", - "max-delay-seconds-message": "Maksimal forsinkelse er 900 sekunder", + "min-delay-seconds-message": "Kun 0 sekunder som minimumværdi er tilladt.", + "max-delay-seconds-message": "Maksimum tilladt værdi er 900 sekunder.", "name": "Navn", - "name-required": "Navn er påkrævet", + "name-required": "Navn er påkrævet.", "queue-type": "Køtype", "sqs-queue-standard": "Standard", "sqs-queue-fifo": "FIFO", "gcp-project-id": "GCP-projekt-ID", "gcp-project-id-required": "GCP-projekt-ID er påkrævet", - "gcp-service-account-key": "GCP servicekonto-nøglefil", - "gcp-service-account-key-required": "GCP servicekonto-nøglefil er påkrævet", + "gcp-service-account-key": "GCP-servicekonto-nøglefil", + "gcp-service-account-key-required": "GCP-servicekonto-nøglefil er påkrævet", "pubsub-topic-name": "Emnenavn", "pubsub-topic-name-required": "Emnenavn er påkrævet", "message-attributes": "Beskedattributter", - "message-attributes-hint": "Brug ${metadataKey} for værdi fra metadata, $[messageKey] for værdi fra meddelelsesindhold i navn-/værdifelter", - "connect-timeout": "Forbindelsestimeout (sek)", - "connect-timeout-required": "Forbindelsestimeout er påkrævet.", - "connect-timeout-range": "Timeout skal være mellem 1 og 200.", + "message-attributes-hint": "Brug ${metadataKey} for værdi fra metadata, $[messageKey] for værdi fra beskedens indhold i felterne navn/værdi.", + "connect-timeout": "Forbindelsestidsgrænse (sek.)", + "connect-timeout-required": "Forbindelsestidsgrænse er påkrævet.", + "connect-timeout-range": "Forbindelsestidsgrænsen skal være mellem 1 og 200.", "client-id": "Klient-ID", - "client-id-hint": "Valgfri. Lad være tomt for automatisk generering. For at undgå konflikter i mikrotjenester, brug unikke ID’er.", - "append-client-id-suffix": "Tilføj service-ID som suffix til klient-ID", - "client-id-suffix-hint": "Valgfrit. Anvendes når \"Client ID\" er angivet eksplicit. Hvis valgt, tilføjes Service ID som et suffiks til Client ID. Hjælper med at undgå fejl, når platformen kører i microservices-tilstand.", + "client-id-hint": "Valgfrit. Lad stå tomt for automatisk genereret Klient-ID. Vær forsigtig ved angivelse af Klient-ID. De fleste MQTT-brokere tillader ikke flere forbindelser med samme Klient-ID. Hvis du forbinder til sådanne brokere, skal din MQTT Klient-ID være unik. Når platformen kører i mikroservicetilstand, startes en kopi af regelnoden i hver mikroservice. Dette vil automatisk føre til flere MQTT-klienter med samme ID og kan forårsage fejl i regelnoden. For at undgå sådanne fejl skal du aktivere \"Tilføj Service-ID som suffiks til Klient-ID\" nedenfor.", + "append-client-id-suffix": "Tilføj Service-ID som suffiks til Klient-ID", + "client-id-suffix-hint": "Valgfrit. Anvendes når \"Klient-ID\" er angivet manuelt. Hvis valgt, tilføjes Service-ID som suffiks til Klient-ID. Hjælper med at undgå fejl, når platformen kører i mikroservicetilstand.", "device-id": "Enheds-ID", "device-id-required": "Enheds-ID er påkrævet.", "clean-session": "Ren session", @@ -5043,23 +5068,23 @@ "private-key-password": "Adgangskode til privat nøgle", "use-system-smtp-settings": "Brug systemets SMTP-indstillinger", "use-metadata-dynamic-interval": "Brug dynamisk interval", - "metadata-dynamic-interval-hint": "Intervalstart og -slut felterne understøtter skabeloner. Brug $[messageKey] eller ${metadataKey}.", - "use-metadata-interval-patterns-hint": "Hvis valgt, bruges mønstre fra metadata eller data til interval.", + "metadata-dynamic-interval-hint": "Indtastningsfelterne for intervalstart og -slut understøtter skabelonbrug. Bemærk, at den indsatte skabelonværdi skal være angivet i millisekunder. Brug $[messageKey] for at hente værdi fra beskeden og ${metadataKey} for at hente værdi fra metadata.", + "use-metadata-interval-patterns-hint": "Hvis valgt, bruger regelnoden start- og slutmønstre for interval fra beskedens metadata eller data, forudsat at intervallerne er i millisekunder.", "use-message-alarm-data": "Brug alarmdata fra besked", "overwrite-alarm-details": "Overskriv alarmdetaljer", - "use-alarm-severity-pattern": "Brug mønster for alarmens alvorlighed", - "check-all-keys": "Tjek at alle specificerede felter er til stede", - "check-all-keys-hint": "Tjekker at alle nøgler findes i data og metadata.", - "check-relation-to-specific-entity": "Tjek relation til specifik enhed", - "check-relation-to-specific-entity-tooltip": "Tjekker om relation eksisterer til en specifik eller hvilken som helst enhed baseret på type og retning.", - "check-relation-hint": "Tjek for relation til bestemt eller vilkårlig enhed.", - "delete-relation-with-specific-entity": "Slet relation med specifik enhed", - "delete-relation-with-specific-entity-hint": "Sletter relation med en bestemt enhed. Ellers slettes alle matchende relationer.", - "delete-relation-hint": "Sletter relation fra oprindelsen til den angivne enhed eller liste af enheder.", + "use-alarm-severity-pattern": "Brug mønster for alarmens alvorlighedsgrad", + "check-all-keys": "Tjek, at alle angivne felter er til stede", + "check-all-keys-hint": "Hvis valgt, kontrolleres det, at alle angivne nøgler er til stede i beskeddata og metadata.", + "check-relation-to-specific-entity": "Tjek relation til specifik entitet", + "check-relation-to-specific-entity-tooltip": "Hvis aktiveret, kontrolleres tilstedeværelsen af relation til en specifik entitet. Ellers kontrolleres tilstedeværelsen af relation til en vilkårlig entitet. I begge tilfælde foretages relationsopslag baseret på konfigureret retning og type.", + "check-relation-hint": "Kontrollerer eksistensen af relation til en specifik eller vilkårlig entitet baseret på retning og relationstype.", + "delete-relation-with-specific-entity": "Slet relation til specifik entitet", + "delete-relation-with-specific-entity-hint": "Hvis aktiveret, slettes kun relationen til én specifik entitet. Ellers fjernes relationer til alle matchende entiteter.", + "delete-relation-hint": "Sletter relation fra afsenderen af den indgående besked til den angivne entitet eller entitetsliste baseret på retning og type.", "remove-current-relations": "Fjern nuværende relationer", - "remove-current-relations-hint": "Fjerner nuværende relationer baseret på type og retning.", - "change-originator-to-related-entity": "Skift oprindelse til relateret enhed", - "change-originator-to-related-entity-hint": "Behandler beskeden som om den kommer fra en anden enhed.", + "remove-current-relations-hint": "Fjerner nuværende relationer fra afsenderen af den indgående besked baseret på retning og type.", + "change-originator-to-related-entity": "Skift afsender til relateret entitet", + "change-originator-to-related-entity-hint": "Anvendes til at behandle en besked som om den kommer fra en anden entitet.", "start-interval": "Interval start", "end-interval": "Interval slut", "start-interval-required": "Interval start er påkrævet.", @@ -5119,31 +5144,31 @@ "email-sender": "Email afsender", "fields-to-check": "Felter der skal kontrolleres", "add-detail": "Tilføj detalje", - "check-all-keys-tooltip": "Kontrollerer, at alle angivne felter findes i besked og metadata.", - "fields-to-check-hint": "Tryk på \"Enter\" for at afslutte. Flere felter understøttes.", - "entity-details-list-empty": "Mindst én detalje skal vælges.", + "check-all-keys-tooltip": "Hvis aktiveret, kontrolleres tilstedeværelsen af alle felter, der er angivet i besked- og metadatafeltnavne, i den indgående besked og dens metadata.", + "fields-to-check-hint": "Tryk på \"Enter\" for at afslutte indtastning af feltnavn. Flere feltnavne understøttes.", + "entity-details-list-empty": "Mindst ét detaljefelt skal vælges.", "alarm-status": "Alarmstatus", "alarm-required": "Mindst én alarmstatus skal vælges.", - "no-entity-details-matching": "Ingen tilsvarende entitetsdetaljer fundet.", - "custom-table-name": "Brugertabelnavn", + "no-entity-details-matching": "Ingen matchende entitetsdetaljer blev fundet.", + "custom-table-name": "Brugertilpasset tabelnavn", "custom-table-name-required": "Tabelnavn er påkrævet", - "custom-table-hint": "Skal starte med 'cs_tb_'. Angiv uden præfikset.", + "custom-table-hint": "Tabellen skal være oprettet i din Cassandra-klynge, og dens navn skal starte med præfikset 'cs_tb_' for at undgå indsættelse af data i de fælles TB-tabeller. Indtast tabelnavnet her uden 'cs_tb_'-præfikset.", "message-field": "Beskedfelt", "message-field-required": "Beskedfelt er påkrævet.", "table-col": "Tabelkolonne", "table-col-required": "Tabelkolonne er påkrævet.", - "latitude-field-name": "Navn på breddegradsfelt", - "longitude-field-name": "Navn på længdegradsfelt", - "latitude-field-name-required": "Navn på breddegradsfelt er påkrævet.", - "longitude-field-name-required": "Navn på længdegradsfelt er påkrævet.", - "fetch-perimeter-info-from-metadata": "Hent perimeteroplysninger fra metadata", - "fetch-perimeter-info-from-metadata-tooltip": "Parser metadatafelt for cirkel eller polygon afhængigt af perimeter-typen.", - "perimeter-key-name": "Perimeter nøgle navn", - "perimeter-key-name-hint": "Metadata felt med perimeter info.", - "perimeter-key-name-required": "Perimeter nøgle navn er påkrævet.", + "latitude-field-name": "Feltnavn for breddegrad", + "longitude-field-name": "Feltnavn for længdegrad", + "latitude-field-name-required": "Feltnavn for breddegrad er påkrævet.", + "longitude-field-name-required": "Feltnavn for længdegrad er påkrævet.", + "fetch-perimeter-info-from-metadata": "Hent perimeterinformation fra metadata", + "fetch-perimeter-info-from-metadata-tooltip": "Hvis perimeter-typen er sat til 'Polygon', vil værdien af metadatafeltet '{{perimeterKeyName}}' blive brugt direkte som definitionsværdi uden yderligere parsing. Hvis perimeter-typen er sat til 'Circle', vil værdien af '{{perimeterKeyName}}'-metadatafeltet blive parseret for at udtrække felterne 'latitude', 'longitude', 'radius', og 'radiusUnit', som bruges til at definere cirkelperimeteren.", + "perimeter-key-name": "Perimeter-nøgle", + "perimeter-key-name-hint": "Navn på metadatafelt, der indeholder perimeterinformation.", + "perimeter-key-name-required": "Perimeter-nøgle er påkrævet.", "perimeter-circle": "Cirkel", "perimeter-polygon": "Polygon", - "perimeter-type": "Perimeter type", + "perimeter-type": "Perimeter-type", "circle-center-latitude": "Cirkelens center breddegrad", "circle-center-latitude-required": "Center breddegrad er påkrævet.", "circle-center-longitude": "Cirkelens center længdegrad", @@ -5155,25 +5180,25 @@ "range-unit-nautical-mile": "Sømil", "range-units": "Afstandsenheder", "range-units-required": "Afstandsenheder er påkrævet.", - "range": "Rækkevidde", - "range-required": "Rækkevidde er påkrævet.", + "range": "Interval", + "range-required": "Interval er påkrævet.", "polygon-definition": "Polygondefinition", "polygon-definition-required": "Polygondefinition er påkrævet.", - "polygon-definition-hint": "Format: [[lat1,lon1],[lat2,lon2],...,[latN,lonN]].", + "polygon-definition-hint": "Brug følgende format til manuel definition af polygon: [[lat1,lon1],[lat2,lon2], ... ,[latN,lonN]].", "min-inside-duration": "Minimal varighed indenfor", - "min-inside-duration-value-required": "Værdi er påkrævet", + "min-inside-duration-value-required": "Minimal varighed indenfor er påkrævet", "min-inside-duration-time-unit": "Tidsenhed for minimal varighed indenfor", "min-outside-duration": "Minimal varighed udenfor", - "min-outside-duration-value-required": "Værdi er påkrævet", + "min-outside-duration-value-required": "Minimal varighed udenfor er påkrævet", "min-outside-duration-time-unit": "Tidsenhed for minimal varighed udenfor", - "tell-failure-if-absent": "Rapporter fejl ved fravær", - "tell-failure-if-absent-hint": "Hvis mindst én af de valgte nøgler ikke findes, vil udgående besked rapportere \"Fejl\".", - "get-latest-value-with-ts": "Hent tidsstempel for de seneste telemetriværdier", + "tell-failure-if-absent": "Rapportér fejl", + "tell-failure-if-absent-hint": "Hvis mindst én valgt nøgle ikke findes, vil den udgående besked rapportere \"Fejl\".", + "get-latest-value-with-ts": "Hent tidsstempel for seneste telemetriværdier", "get-latest-value-with-ts-hint": "Hvis valgt, vil de seneste telemetriværdier også inkludere tidsstempel, f.eks.: \"temp\": \"{\"ts\":1574329385897, \"value\":42}\"", "ignore-null-strings": "Ignorér tomme strenge", - "ignore-null-strings-hint": "Ignorerer felter med tomme værdier.", - "add-metadata-key-values-as-kafka-headers": "Tilføj nøgle-værdi par fra metadata til Kafka headers", - "add-metadata-key-values-as-kafka-headers-hint": "Hvis valgt, tilføjes metadataens nøgle-værdi par som byte arrays med foruddefineret tegnkodning.", + "ignore-null-strings-hint": "Hvis valgt, vil regelnoden ignorere entitetsfelter med tom værdi.", + "add-metadata-key-values-as-kafka-headers": "Tilføj metadata nøgle-værdi-par til Kafka header", + "add-metadata-key-values-as-kafka-headers-hint": "Hvis valgt, tilføjes nøgle-værdi-par fra beskedmetadata til headers i udgående Kafka-poster som byte-arrays med foruddefineret tegnkodning.", "charset-encoding": "Tegnkodning", "charset-encoding-required": "Tegnkodning er påkrævet.", "charset-us-ascii": "US-ASCII", @@ -5182,63 +5207,63 @@ "charset-utf-16be": "UTF-16BE", "charset-utf-16le": "UTF-16LE", "charset-utf-16": "UTF-16", - "select-queue-hint": "Vælg et kønavn fra rullemenu eller angiv et brugerdefineret navn.", - "device-profile-node-hint": "Nyttigt ved varighed eller gentagne betingelser for at sikre fortsat evaluering af alarmtilstand.", - "persist-alarm-rules": "Gem tilstand for alarmregler", - "persist-alarm-rules-hint": "Gemmer behandlingsstatus i databasen.", + "select-queue-hint": "Kønavnet kan vælges fra en rullemenu eller angives manuelt.", + "device-profile-node-hint": "Nyttigt, hvis du har varigheds- eller gentagelsesbetingelser for at sikre kontinuitet i evalueringen af alarmtilstand.", + "persist-alarm-rules": "Bevar tilstand for alarmregler", + "persist-alarm-rules-hint": "Hvis aktiveret, vil regelnoden gemme behandlingstilstanden i databasen.", "fetch-alarm-rules": "Hent tilstand for alarmregler", - "fetch-alarm-rules-hint": "Genskaber tilstand ved opstart for at sikre korrekt alarmstatus.", - "input-value-key": "Input nøgle", - "input-value-key-required": "Input nøgle er påkrævet.", - "output-value-key": "Output nøgle", - "output-value-key-required": "Output nøgle er påkrævet.", - "number-of-digits-after-floating-point": "Antal decimaler", - "number-of-digits-after-floating-point-range": "Antal decimaler skal være mellem 0 og 15.", - "failure-if-delta-negative": "Rapportér fejl ved negativ delta", - "failure-if-delta-negative-tooltip": "Fejl ved negativ forskel mellem værdier.", + "fetch-alarm-rules-hint": "Hvis aktiveret, vil regelnoden gendanne behandlingstilstanden ved initialisering og sikre, at alarmer udløses selv efter servergenstart. Ellers vil tilstanden blive gendannet, når den første besked fra enheden modtages.", + "input-value-key": "Inputværdinøgle", + "input-value-key-required": "Inputværdinøgle er påkrævet.", + "output-value-key": "Outputværdinøgle", + "output-value-key-required": "Outputværdinøgle er påkrævet.", + "number-of-digits-after-floating-point": "Antal decimaler efter komma", + "number-of-digits-after-floating-point-range": "Antallet af decimaler skal være mellem 0 og 15.", + "failure-if-delta-negative": "Rapportér fejl, hvis delta er negativ", + "failure-if-delta-negative-tooltip": "Regelnoden tvinger beskedbehandling til at fejle, hvis delta-værdien er negativ.", "use-caching": "Brug caching", - "use-caching-tooltip": "Regelknuden vil cache værdien af \"{{inputValueKey}}\" fra den indkommende besked for at forbedre ydeevnen. Bemærk, at cachen ikke opdateres, hvis \"{{inputValueKey}}\" ændres et andet sted.", + "use-caching-tooltip": "Regelnoden vil cache værdien af \"{{inputValueKey}}\", som modtages fra den indgående besked, for at forbedre ydeevnen. Bemærk, at cachen ikke opdateres, hvis du ændrer værdien af \"{{inputValueKey}}\" andre steder.", "add-time-difference-between-readings": "Tilføj tidsforskel mellem aflæsninger af \"{{inputValueKey}}\"", - "add-time-difference-between-readings-tooltip": "Hvis aktiveret, tilføjer regelknuden \"{{periodValueKey}}\" til den udgående besked.", - "period-value-key": "Tidsintervalnøgle", - "period-value-key-required": "Tidsintervalnøgle er påkrævet.", - "general-pattern-hint": "Brug ${metadataKey} for værdi fra metadata, $[messageKey] for værdi fra meddelelsesindhold.", - "alarm-severity-pattern-hint": "Brug ${metadataKey} for værdi fra metadata, $[messageKey] for værdi fra meddelelsesindhold. Alarmens alvorlighed skal være et systemniveau (CRITICAL, MAJOR osv.)", - "output-node-name-hint": "Regelknudens navn svarer til relationstypen for den udgående besked og bruges til at videresende beskeder til andre regelknuder i den kaldende regelkæde.", + "add-time-difference-between-readings-tooltip": "Hvis aktiveret, tilføjer regelnoden \"{{periodValueKey}}\" til den udgående besked.", + "period-value-key": "Periodeværdinøgle", + "period-value-key-required": "Periodeværdinøgle er påkrævet.", + "general-pattern-hint": "Brug ${metadataKey} for værdi fra metadata, $[messageKey] for værdi fra beskedens indhold.", + "alarm-severity-pattern-hint": "Brug ${metadataKey} for værdi fra metadata, $[messageKey] for værdi fra beskedens indhold. Alarmernes alvorlighed skal være systemdefineret (CRITICAL, MAJOR osv.)", + "output-node-name-hint": "Regelnodens navn svarer til relationstypen for den udgående besked og bruges til at videresende beskeder til andre regelnoder i den kaldende regelkæde.", "use-server-ts": "Brug serverens tidsstempel", - "use-server-ts-hint": "Brug serverens aktuelle tidsstempel for tidsseriedata, der mangler et eksplicit tidsstempel. Dette hjælper med korrekt rækkefølge, når der behandles beskeder fra flere kilder eller ved uordnet ankomst.", - "kv-map-pattern-hint": "Alle inputfelter understøtter skabelonisering. Brug $[messageKey] for værdi fra beskeden og ${metadataKey} for værdi fra metadata.", - "kv-map-single-pattern-hint": "Inputfelt understøtter skabelonisering. Brug $[messageKey] for værdi fra beskeden og ${metadataKey} for værdi fra metadata.", + "use-server-ts-hint": "Brug serverens aktuelle tidsstempel for tidsseriedata uden eksplicit tidsstempel. Dette hjælper med at bevare korrekt rækkefølge ved behandling af beskeder fra flere kilder eller når beskeder ankommer ude af rækkefølge.", + "kv-map-pattern-hint": "Alle inputfelter understøtter skabeloner. Brug $[messageKey] for værdi fra beskeden og ${metadataKey} for værdi fra metadata.", + "kv-map-single-pattern-hint": "Inputfeltet understøtter skabeloner. Brug $[messageKey] for værdi fra beskeden og ${metadataKey} for værdi fra metadata.", "shared-scope": "Delt område", "server-scope": "Serverområde", "client-scope": "Klientområde", - "attribute-type": "Attribute", - "attribute-type-description": "Hent attributværdi fra database", - "attribute-type-result-description": "Gem som attribut i database", + "attribute-type": "Attribut", + "attribute-type-description": "Hent attributværdi fra databasen", + "attribute-type-result-description": "Gem resultatet som en entitetsattribut i databasen", "constant-type": "Konstant", "constant-type-description": "Definér konstant værdi", "time-series-type": "Tidsserie", - "time-series-type-description": "Hent seneste værdi fra database", - "time-series-type-result-description": "Gem som tidsserie i database", + "time-series-type-description": "Hent seneste tidsserieværdi fra databasen", + "time-series-type-result-description": "Gem resultatet som en entitets tidsserie i databasen", "message-body-type": "Besked", - "message-body-type-description": "Hent argumentværdi fra besked", - "message-body-type-result-description": "Tilføj resultat til besked", + "message-body-type-description": "Hent argumentværdi fra den indgående besked", + "message-body-type-result-description": "Tilføj resultat til den udgående besked", "message-metadata-type": "Metadata", - "message-metadata-type-description": "Hent argumentværdi fra metadata", - "message-metadata-result-description": "Tilføj resultat til metadata", + "message-metadata-type-description": "Hent argumentværdi fra den indgående beskeds metadata", + "message-metadata-result-description": "Tilføj resultat til metadata for den udgående besked", "argument-tile": "Argumenter", "no-arguments-prompt": "Ingen argumenter konfigureret", "result-title": "Resultat", "functions-field-input": "Funktioner", - "no-option-found": "Ingen muligheder fundet", + "no-option-found": "Ingen valgmuligheder fundet", "argument-source-field-input": "Kilde", - "argument-source-field-input-required": "Kilde er påkrævet.", + "argument-source-field-input-required": "Argumentkilde er påkrævet.", "argument-key-field-input": "Nøgle", - "argument-key-field-input-required": "Nøgle er påkrævet.", + "argument-key-field-input-required": "Argumentnøgle er påkrævet.", "constant-value-field-input": "Konstant værdi", "constant-value-field-input-required": "Konstant værdi er påkrævet.", - "attribute-scope-field-input": "Attribut område", - "attribute-scope-field-input-required": "Område er påkrævet.", + "attribute-scope-field-input": "Attributområde", + "attribute-scope-field-input-required": "Attributområde er påkrævet.", "default-value-field-input": "Standardværdi", "type-field-input": "Type", "type-field-input-required": "Type er påkrævet.", @@ -5266,21 +5291,21 @@ "clear-selected-keys": "Ryd valgte nøgler", "geofence-configuration": "Geofence-konfiguration", "coordinate-field-names": "Koordinatfeltnavne", - "coordinate-field-hint": "Forsøger at hente felter fra besked. Hvis ikke til stede, bruges metadata.", + "coordinate-field-hint": "Regelnoden forsøger at hente de angivne felter fra beskeden. Hvis de ikke findes, vil den forsøge at hente dem fra metadata.", "presence-monitoring-strategy": "Strategi for tilstedeværelsesovervågning", "presence-monitoring-strategy-on-first-message": "Ved første besked", "presence-monitoring-strategy-on-each-message": "Ved hver besked", - "presence-monitoring-strategy-on-first-message-hint": "Rapporterer status 'Inde' eller 'Ude' ved første besked efter minimumsvarighed siden sidste status.", - "presence-monitoring-strategy-on-each-message-hint": "Rapporterer status ved hver besked efter statusændring.", + "presence-monitoring-strategy-on-first-message-hint": "Rapporterer tilstedeværelsesstatus 'Inde' eller 'Ude' ved første besked efter den konfigurerede minimumsvarighed er opnået siden sidste status 'Gået ind' eller 'Gået ud'.", + "presence-monitoring-strategy-on-each-message-hint": "Rapporterer tilstedeværelsesstatus 'Inde' eller 'Ude' ved hver besked efter statusopdatering 'Gået ind' eller 'Gået ud'.", "fetch-credentials-to": "Hent legitimationsoplysninger til", - "add-originator-attributes-to": "Tilføj afsenders attributter til", - "originator-attributes": "Afsenders attributter", - "fetch-latest-telemetry-with-timestamp": "Hent seneste telemetry med tidsstempel", - "fetch-latest-telemetry-with-timestamp-tooltip": "Inkluderer tidsstempel i metadata, f.eks.: \"{{latestTsKeyName}}\": \"{\"ts\":1574329385897, \"value\":42}\"", - "tell-failure": "Rapportér fejl hvis attribut mangler", - "tell-failure-tooltip": "Rapporterer fejl hvis mindst én valgt nøgle mangler.", - "created-time": "Oprettelsestid", - "chip-help": "Tryk på 'Enter' for at fuldføre {{inputName}}-indtastning. \nTryk på 'Backspace' for at slette {{inputName}}. \nFlere værdier understøttes.", + "add-originator-attributes-to": "Tilføj afsenderattributter til", + "originator-attributes": "Afsenderattributter", + "fetch-latest-telemetry-with-timestamp": "Hent seneste telemetri med tidsstempel", + "fetch-latest-telemetry-with-timestamp-tooltip": "Hvis valgt, tilføjes de seneste telemetriværdier med tidsstempel til metadata, f.eks.: \"{{latestTsKeyName}}\": \"{\\\"ts\\\":1574329385897, \\\"value\\\":42}\"", + "tell-failure": "Rapportér fejl, hvis en eller flere attributter mangler", + "tell-failure-tooltip": "Hvis mindst én valgt nøgle ikke findes, vil den udgående besked rapportere \"Fejl\".", + "created-time": "Oprettelsestidspunkt", + "chip-help": "Tryk på 'Enter' for at afslutte indtastning af {{inputName}}. \nTryk på 'Backspace' for at slette {{inputName}}. \nFlere værdier understøttes.", "detail": "detalje", "field-name": "feltnavn", "device-profile": "enhedsprofil", @@ -5291,19 +5316,19 @@ "first-name": "Fornavn", "last-name": "Efternavn", "label": "Etiket", - "originator-fields-mapping": "Afsender felttilknytning", - "add-mapped-originator-fields-to": "Tilføj mappede afsenderfelter til", + "originator-fields-mapping": "Kortlægning af afsenderfelter", + "add-mapped-originator-fields-to": "Tilføj kortlagte afsenderfelter til", "fields": "Felter", "skip-empty-fields": "Spring tomme felter over", - "skip-empty-fields-tooltip": "Tomme felter tilføjes ikke til uddata.", - "fetch-interval": "Hentningsinterval", - "fetch-strategy": "Hentningsstrategi", - "fetch-timeseries-from-to": "Hent tidsserier fra {{startInterval}} {{startIntervalTimeUnit}} siden til {{endInterval}} {{endIntervalTimeUnit}} siden.", - "fetch-timeseries-from-to-invalid": "Ugyldig hentning af tidsserier (\"Intervalstart\" skal være mindre end \"Intervalslut\").", - "use-metadata-dynamic-interval-tooltip": "Hvis valgt, vil rule node bruge dynamisk intervalstart og -slut baseret på mønstre i beskeden og metadata.", - "all-mode-hint": "Hvis hentningstilstand \"Alle\" er valgt, vil rule node hente telemetri fra intervallet med konfigurerbare forespørgselsparametre.", - "first-mode-hint": "Hvis hentningstilstand \"Første\" er valgt, vil rule node hente den telemetri, der ligger tættest på intervallets start.", - "last-mode-hint": "Hvis hentningstilstand \"Sidste\" er valgt, vil rule node hente den telemetri, der ligger tættest på intervallets slutning.", + "skip-empty-fields-tooltip": "Felter med tomme værdier tilføjes ikke til udgående besked eller metadata.", + "fetch-interval": "Henteinterval", + "fetch-strategy": "Hentestrategi", + "fetch-timeseries-from-to": "Hent tidsserie fra {{startInterval}} {{startIntervalTimeUnit}} siden til {{endInterval}} {{endIntervalTimeUnit}} siden.", + "fetch-timeseries-from-to-invalid": "Ugyldig tidsseriehentning (\"Interval start\" skal være mindre end \"Interval slut\").", + "use-metadata-dynamic-interval-tooltip": "Hvis valgt, bruger regelnoden dynamisk start og slut på intervallet baseret på besked- og metadatamønstre.", + "all-mode-hint": "Hvis hentemåde \"Alle\" er valgt, vil regelnoden hente telemetri fra hele intervallet baseret på konfigurerbare forespørgselsparametre.", + "first-mode-hint": "Hvis hentemåde \"Første\" er valgt, hentes den telemetri, der ligger tættest på intervalstarten.", + "last-mode-hint": "Hvis hentemåde \"Sidste\" er valgt, hentes den telemetri, der ligger tættest på intervalslutningen.", "ascending": "Stigende", "descending": "Faldende", "min": "Min", @@ -5312,39 +5337,39 @@ "sum": "Sum", "count": "Antal", "none": "Ingen", - "last-level-relation-tooltip": "Søger kun relationer på det maksimale niveau.", - "last-level-device-relation-tooltip": "Søger kun enheder på det maksimale niveau.", + "last-level-relation-tooltip": "Hvis valgt, vil regelnoden kun søge relaterede enheder på det niveau, der er angivet som maksimal relation.", + "last-level-device-relation-tooltip": "Hvis valgt, vil regelnoden kun søge relaterede enheder på det niveau, der er angivet som maksimal relation.", "data-to-fetch": "Data der skal hentes", - "mapping-of-customers": "Kundemapping", - "map-fields-required": "Alle felter skal udfyldes.", + "mapping-of-customers": "Kortlægning af kunde", + "map-fields-required": "Alle kortlægningsfelter er påkrævede.", "attributes": "Attributter", - "related-device-attributes": "Attributter for relateret enhed", + "related-device-attributes": "Attributter for relaterede enheder", "add-selected-attributes-to": "Tilføj valgte attributter til", "device-profiles": "Enhedsprofiler", - "mapping-of-tenant": "Tenant-mapping", + "mapping-of-tenant": "Kortlægning af tenant", "add-attribute-key": "Tilføj attributnøgle", "message-template": "Beskedskabelon", "message-template-required": "Beskedskabelon er påkrævet", "use-system-slack-settings": "Brug systemets Slack-indstillinger", "slack-api-token": "Slack API-token", "slack-api-token-required": "Slack API-token er påkrævet", - "keys-mapping": "Nøgletilknytning", + "keys-mapping": "Nøglekortlægning", "add-key": "Tilføj nøgle", "recipients": "Modtagere", - "message-subject-and-content": "Besked emne og indhold", - "template-rules-hint": "Brug $[messageKey] eller ${metadataKey} til værdier.", - "originator-customer-desc": "Brug kundens oprindelige afsender.", - "originator-tenant-desc": "Brug nuværende tenant.", - "originator-related-entity-desc": "Brug relateret entitet som afsender.", - "originator-alarm-originator-desc": "Brug alarmens afsender (kun hvis besked er alarm).", - "originator-entity-by-name-pattern-desc": "Find og brug entitet ud fra navn og type.", - "email-from-template-hint": "Brug $[messageKey] eller ${metadataKey} for at trække værdier.", - "recipients-block-main-hint": "Kommasepareret liste, understøtter templatization.", - "forward-msg-default-rule-chain": "Videresend besked til standard regelkæde", - "forward-msg-default-rule-chain-tooltip": "Bruger standard regelkæde for afsender eller konfigureret kæde.", - "exclude-zero-deltas": "Udelad nul-delta værdier", - "exclude-zero-deltas-hint": "Tilføj kun nøgle hvis værdi ikke er nul.", - "exclude-zero-deltas-time-difference-hint": "Tilføj kun hvis outputværdi ≠ 0.", + "message-subject-and-content": "Beskedens emne og indhold", + "template-rules-hint": "Begge inputfelter understøtter skabeloner. Brug $[messageKey] for værdi fra besked og ${metadataKey} for værdi fra metadata.", + "originator-customer-desc": "Brug kunde tilhørende beskedens afsender som ny afsender.", + "originator-tenant-desc": "Brug nuværende tenant som ny afsender.", + "originator-related-entity-desc": "Brug relateret enhed som ny afsender. Opslag baseret på konfigureret relationstype og retning.", + "originator-alarm-originator-desc": "Brug alarmens afsender som ny afsender. Kun hvis afsenderen er en alarmenhed.", + "originator-entity-by-name-pattern-desc": "Brug enhed hentet fra databasen som ny afsender. Opslag baseret på enhedstype og angivet navnemønster.", + "email-from-template-hint": "Brug $[messageKey] for værdi fra besked og ${metadataKey} for værdi fra metadata.", + "recipients-block-main-hint": "Kommasepareret adresseliste. Alle inputfelter understøtter skabeloner. Brug $[messageKey] for værdi fra besked og ${metadataKey} for værdi fra metadata.", + "forward-msg-default-rule-chain": "Videresend besked til afsenders standardregel-kæde", + "forward-msg-default-rule-chain-tooltip": "Hvis aktiveret, videresendes besked til afsenders standardregel-kæde, eller den i konfigurationen angivne, hvis ingen standard er defineret i enhedsprofilen.", + "exclude-zero-deltas": "Ekskludér nul-deltaer fra udgående besked", + "exclude-zero-deltas-hint": "Hvis aktiveret, tilføjes nøglen \"{{outputValueKey}}\" kun, hvis værdien ikke er nul.", + "exclude-zero-deltas-time-difference-hint": "Hvis aktiveret, tilføjes \"{{outputValueKey}}\" og \"{{periodValueKey}}\" kun, hvis \"{{outputValueKey}}\" ikke er nul.", "search-direction-from": "Fra afsender til målentitet", "search-direction-to": "Fra målentitet til afsender", "del-relation-direction-from": "Fra afsender", @@ -5354,33 +5379,33 @@ "function-name": "Funktionsnavn", "function-name-required": "Funktionsnavn er påkrævet.", "qualifier": "Kvalifikator", - "qualifier-hint": "Hvis kvalifikatoren ikke er angivet, vil standardkvalifikatoren \"$LATEST\" blive brugt.", + "qualifier-hint": "Hvis kvalifikator ikke er angivet, bruges standardkvalifikatoren \"$LATEST\".", "aws-credentials": "AWS-legitimationsoplysninger", - "connection-timeout": "Forbindelsestimeout", - "connection-timeout-required": "Forbindelsestimeout er påkrævet.", - "connection-timeout-min": "Minimum forbindelsestimeout er 0.", - "connection-timeout-hint": "Ventetid ved etablering af forbindelse. 0 betyder uendelig og frarådes.", - "request-timeout": "Anmodningstimeout", - "request-timeout-required": "Anmodningstimeout er påkrævet", - "request-timeout-min": "Minimum anmodningstimeout er 0", - "request-timeout-hint": "Ventetid for anmodning, før timeout. 0 betyder uendelig og frarådes.", + "connection-timeout": "Forbindelsestidsgrænse", + "connection-timeout-required": "Forbindelsestidsgrænse er påkrævet.", + "connection-timeout-min": "Minimum forbindelsestidsgrænse er 0.", + "connection-timeout-hint": "Tiden i sekunder, der ventes ved etablering af forbindelse, før timeout. En værdi på 0 betyder uendelig, hvilket ikke anbefales.", + "request-timeout": "Forespørgsels-timeout", + "request-timeout-required": "Forespørgsels-timeout er påkrævet.", + "request-timeout-min": "Minimum forespørgsels-timeout er 0.", + "request-timeout-hint": "Tiden i sekunder, der ventes på at gennemføre forespørgslen, før timeout. En værdi på 0 betyder uendelig, hvilket ikke anbefales.", "units": "Enheder", - "tell-failure-aws-lambda": "Rapportér fejl hvis AWS Lambda-funktion kaster en undtagelse", - "tell-failure-aws-lambda-hint": "Tvinger fejl hvis Lambda-funktionen fejler.", - "basic-mode": "Grundlæggende", + "tell-failure-aws-lambda": "Rapportér fejl, hvis AWS Lambda-funktion kaster en undtagelse", + "tell-failure-aws-lambda-hint": "Regelnoden tvinger fejl i beskedbehandling, hvis AWS Lambda-funktion udløser en undtagelse.", + "basic-mode": "Basis", "advanced-mode": "Avanceret", "save-time-series": { "processing-settings": "Behandlingsindstillinger", - "processing-settings-hint": "Definér hvordan beskeder behandles. Grundlæggende eller avancerede strategier.", - "advanced-settings-hint": "Vær forsigtig – visse kombinationer kan føre til uventet adfærd.", + "processing-settings-hint": "Definér, hvordan indgående beskeder behandles. Basisindstillinger lader dig vælge forudkonfigurerede strategier, mens avancerede indstillinger tillader valg af individuelle strategier for hver handling.", + "advanced-settings-hint": "Vær forsigtig ved konfiguration af behandlingsstrategier. Visse kombinationer kan føre til uforudset opførsel.", "strategy": "Strategi", - "deduplication-interval": "Deduplikeringsinterval", - "deduplication-interval-required": "Dedupliceringsinterval er påkrævet", - "deduplication-interval-min-max-range": "Skal være mellem 1 sekund og 1 dag", + "deduplication-interval": "Deduplikationsinterval", + "deduplication-interval-required": "Deduplikationsinterval er påkrævet", + "deduplication-interval-min-max-range": "Deduplikationsinterval skal være mindst 1 sekund og højst 1 dag", "strategy-type": { "every-message": "Ved hver besked", "skip": "Spring over", - "deduplicate": "Dedupliker", + "deduplicate": "Deduplikér", "web-sockets-only": "Kun WebSockets" }, "time-series": "Tidsserier", @@ -5390,17 +5415,17 @@ }, "save-attribute": { "processing-settings": "Behandlingsindstillinger", - "processing-settings-hint": "Definér hvordan beskeder behandles. Grundlæggende eller avancerede strategier.", - "advanced-settings-hint": "Vær forsigtig – visse kombinationer kan føre til uventet adfærd.", + "processing-settings-hint": "Definér, hvordan indgående beskeder behandles. Basisindstillinger lader dig vælge forudkonfigurerede strategier, mens avancerede indstillinger tillader valg af individuelle strategier for hver handling.", + "advanced-settings-hint": "Vær forsigtig ved konfiguration af behandlingsstrategier. Visse kombinationer kan føre til uforudset opførsel.", "strategy": "Strategi", - "deduplication-interval": "Deduplikeringsinterval", - "deduplication-interval-required": "Deduplikeringsinterval er påkrævet", - "deduplication-interval-min-max-range": "Skal være mellem 1 sekund og 1 dag", + "deduplication-interval": "Deduplikationsinterval", + "deduplication-interval-required": "Deduplikationsinterval er påkrævet", + "deduplication-interval-min-max-range": "Deduplikationsinterval skal være mindst 1 sekund og højst 1 dag", "scope": "Omfang", "strategy-type": { "every-message": "Ved hver besked", "skip": "Spring over", - "deduplicate": "Dedupliker", + "deduplicate": "Deduplikér", "web-sockets-only": "Kun WebSockets" }, "attributes": "Attributter" @@ -5432,32 +5457,33 @@ "ai": { "ai-model": "AI-model", "model": "Model", - "ai-model-hint": "Vælg den forudkonfigurerede AI-model til at behandle forespørgsler sendt af denne rule node, eller brug \"Opret ny\" for at konfigurere en ny.", - "prompt-settings": "Promptindstillinger", - "prompt-settings-hint": "Den valgfrie systemprompt angiver AI'ens generelle rolle og begrænsninger, mens brugerprompten definerer den specifikke opgave. Begge felter understøtter også skabelonfunktionalitet.", + "ai-model-hint": "Vælg den forudkonfigurerede AI-model til at behandle anmodninger sendt af denne regelnode, eller brug \"Opret ny\" for at konfigurere en ny.", + "prompt-settings": "Prompt-indstillinger", + "prompt-settings-hint": "Den valgfrie systemprompt angiver AI'ens generelle rolle og begrænsninger, mens brugerprompten definerer den specifikke opgave, der skal udføres. Begge felter understøtter også skabeloner.", "system-prompt": "Systemprompt", - "system-prompt-max-length": "Systemprompt må højst være 500000 tegn.", + "system-prompt-max-length": "Systemprompt må højst indeholde 500000 tegn.", "system-prompt-blank": "Systemprompt må ikke være tom.", "user-prompt": "Brugerprompt", "user-prompt-required": "Brugerprompt er påkrævet.", - "user-prompt-max-length": "Brugerprompt må højst være 500000 tegn.", + "user-prompt-max-length": "Brugerprompt må højst indeholde 500000 tegn.", "user-prompt-blank": "Brugerprompt må ikke være tom.", - "response-format": "Svarformat", + "response-format": "Svartype", "response-text": "Tekst", "response-json": "JSON", "response-json-schema": "JSON-skema", - "response-format-hint-TEXT": "Tillader modellen at generere vilkårlig tekst, som måske eller måske ikke er gyldig JSON. Hvis output ikke er gyldig JSON, bliver det automatisk pakket ind i en JSON med nøglen \"response\".", - "response-format-hint-JSON": "Modellen skal generere et svar, der er gyldig JSON. Hvis output ikke er gyldig JSON, bliver det automatisk pakket ind i en JSON med nøglen \"response\".", - "response-format-hint-JSON_SCHEMA": "Modellen skal generere en JSON, der matcher strukturen og datatyperne defineret i det angivne skema. Hvis output ikke er gyldig JSON, bliver det automatisk pakket ind i en JSON med nøglen \"response\".", - "response-json-schema-hint": "Selvom enhver gyldig JSON-skema kan indtastes, understøtter denne rule node kun et begrænset sæt funktioner. Se dokumentationen for detaljer.", + "response-format-hint-TEXT": "Tillader modellen at generere vilkårlig tekst, som muligvis ikke er et gyldigt JSON-objekt. Hvis output ikke er gyldigt JSON, vil det automatisk blive pakket ind i et JSON-objekt under nøglen \"response\".", + "response-format-hint-JSON": "Modellen skal generere et svar, der er gyldigt JSON. Hvis output ikke er gyldigt JSON, vil det automatisk blive pakket ind i et JSON-objekt under nøglen \"response\".", + "response-format-hint-JSON_SCHEMA": "Modellen skal generere JSON, der matcher den specifikke struktur og datatyper defineret i det angivne skema. Hvis output ikke er gyldigt JSON, vil det automatisk blive pakket ind i et JSON-objekt under nøglen \"response\".", + "response-json-schema-hint": "Selvom enhver gyldig JSON-skema kan indtastes, understøtter denne regelnode kun et begrænset sæt af dets funktioner. Se node-dokumentationen for detaljer.", "response-json-schema-required": "JSON-skema er påkrævet", "advanced-settings": "Avancerede indstillinger", "timeout": "Timeout", - "timeout-hint": "Maksimalt tidsrum at vente på svar \nfra AI-modellen, før forespørgslen afsluttes.", + "timeout-hint": "Maksimal ventetid på svar fra AI-modellen, før anmodningen afbrydes.", "timeout-required": "Timeout er påkrævet", "timeout-validation": "Skal være mellem 1 sekund og 10 minutter.", "force-acknowledgement": "Tving kvittering", - "force-acknowledgement-hint": "Hvis aktiveret, kvitteres der straks for den indgående besked. Modellens svar bliver derefter sat i kø som en separat, ny besked." + "force-acknowledgement-hint": "Hvis aktiveret, kvitteres den indgående besked straks. Modellens svar sættes derefter i kø som en separat, ny besked.", + "ai-resources": "AI-ressourcer" } }, "timezone": { @@ -5757,9 +5783,9 @@ "rule-engine-exceptions-ttl-days": "Rule Engine-undtagelser TTL dage", "rule-engine-exceptions-ttl-days-required": "Rule Engine-undtagelser TTL dage er påkrævet", "rule-engine-exceptions-ttl-days-range": "Rule Engine-undtagelser TTL dage må ikke være negativt", - "max-rule-node-executions-per-message": "Maksimalt antal regelnode-udførelser pr. besked", - "max-rule-node-executions-per-message-required": "Maksimalt antal regelnode-udførelser pr. besked er påkrævet.", - "max-rule-node-executions-per-message-range": "Maksimalt antal regelnode-udførelser pr. besked må ikke være negativt", + "max-rule-node-executions-per-message": "Maks. antal regelnodekørsler pr. besked", + "max-rule-node-executions-per-message-required": "Maks. antal regelnodekørsler pr. besked er påkrævet.", + "max-rule-node-executions-per-message-range": "Maks. antal regelnodekørsler pr. besked må ikke være negativ", "max-emails": "Maksimalt antal sendte e-mails", "max-emails-required": "Maksimalt antal sendte e-mails er påkrævet.", "max-emails-range": "Maksimalt antal sendte e-mails må ikke være negativt", @@ -5987,9 +6013,10 @@ "label": "Etiket", "value": "Værdi", "date": "Dato", - "show-date-time-interval": "Vis datotidsinterval", - "show-date-time-interval-hint": "Vis datotidsinterval i henhold til dataaggregering.", + "show-date-time-interval": "Vis dato-/tidsinterval", + "show-date-time-interval-hint": "Vis dato-/tidsinterval i henhold til dataaggregering.", "hide-zero-tooltip-values": "Skjul nulværdier", + "show-stack-total": "Vis totalværdi i stablet tilstand", "background-color": "Baggrundsfarve", "background-blur": "Baggrundssløring" }, @@ -6702,15 +6729,15 @@ "no-widgets-text": "Ingen widgets fundet", "management": "Widgetadministration", "editor": "Widget-editor", - "confirm-to-exit-editor-html": "Du har ikke gemt dine widgetindstillinger.
Er du sikker på, at du vil forlade denne side?", - "widget-type-not-found": "Problem med at indlæse widgetkonfiguration.
Den tilknyttede widgettype er sandsynligvis blevet fjernet.", + "confirm-to-exit-editor-html": "Du har ikke gemte widget-indstillinger.
Er du sikker på, at du vil forlade denne side?", + "widget-type-not-found": "Problem med indlæsning af widget-konfiguration.
Den tilknyttede widget-type er\n sandsynligvis blevet fjernet.", "widget-type-load-error": "Widget blev ikke indlæst på grund af følgende fejl:", "remove": "Fjern widget", "delete": "Slet widget", "edit": "Rediger widget", "remove-widget-title": "Er du sikker på, at du vil fjerne widgetten '{{widgetTitle}}'?", - "remove-widget-text": "Efter bekræftelse vil widgetten og alle tilknyttede data ikke kunne gendannes.", - "replace-reference-with-widget-copy": "Erstat reference med kopi af widget", + "remove-widget-text": "Efter bekræftelse bliver widgetten og alle relaterede data uigenkaldeligt slettet.", + "replace-reference-with-widget-copy": "Erstat reference med en kopi af widget", "timeseries": "Tidsserier", "search-data": "Søg data", "no-data-found": "Ingen data fundet", @@ -7550,8 +7577,8 @@ "October": "Oktober", "November": "November", "December": "December", - "Custom Date Range": "Brugerdefineret datoområde", - "Date Range Template": "Skabelon for datoområde", + "Custom Date Range": "Brugerdefineret datointerval", + "Date Range Template": "Datointervalskabelon", "Today": "I dag", "Yesterday": "I går", "This Week": "Denne uge", @@ -7572,7 +7599,7 @@ "Custom interval": "Brugerdefineret interval", "Interval": "Interval", "Step size": "Trinstørrelse", - "Ok": "OK" + "Ok": "Ok" } }, "doughnut": { @@ -7784,11 +7811,11 @@ "gpio-switches": "GPIO-kontakter", "no-gpio-switches": "Ingen GPIO-kontakter konfigureret", "add-gpio-switch": "Tilføj GPIO-kontakt", - "gpio-status-request": "GPIO-statusanmodning", + "gpio-status-request": "GPIO-statusforespørgsel", "method-name": "Metodenavn", "method-body": "Metodeindhold", "gpio-status-change-request": "Anmodning om ændring af GPIO-status", - "parse-gpio-status-function": "Funktion til at fortolke GPIO-status", + "parse-gpio-status-function": "Parse-funktion for GPIO-status", "gpio-leds": "GPIO-LED'er", "no-gpio-leds": "Ingen GPIO-LED'er konfigureret", "add-gpio-led": "Tilføj GPIO-LED" @@ -9522,4 +9549,4 @@ "language": { "language": "Sprog" } -} +} \ No newline at end of file diff --git a/ui-ngx/src/assets/locale/locale.constant-de_DE.json b/ui-ngx/src/assets/locale/locale.constant-de_DE.json index 8df5966d60..4e3a41e488 100644 --- a/ui-ngx/src/assets/locale/locale.constant-de_DE.json +++ b/ui-ngx/src/assets/locale/locale.constant-de_DE.json @@ -163,39 +163,39 @@ "aws-secret-access-key-required": "AWS Secret Access Key ist erforderlich", "aws-region": "AWS-Region", "aws-region-required": "AWS-Region ist erforderlich", - "number-from": "Absendernummer", - "number-from-required": "Absendernummer ist erforderlich.", - "number-to": "Empfängernummer", - "number-to-required": "Empfängernummer ist erforderlich.", - "phone-number-hint": "Telefonnummer im E.164-Format, z. B. +19995550123", - "phone-number-hint-twilio": "Telefonnummer im E.164-Format/SID der Telefonnummer/Messaging Service SID, z. B. +19995550123/PNXXX/MGXXX", - "phone-number-pattern": "Ungültige Telefonnummer. Sollte im E.164-Format sein, z. B. +19995550123.", - "phone-number-pattern-twilio": "Ungültige Telefonnummer. Sollte im E.164-Format/SID der Telefonnummer/Messaging Service SID sein.", + "number-from": "Telefonnummer Von", + "number-from-required": "Telefonnummer Von ist erforderlich.", + "number-to": "Telefonnummer An", + "number-to-required": "Telefonnummer An ist erforderlich.", + "phone-number-hint": "Telefonnummer im E.164-Format, z. B. +19995550123", + "phone-number-hint-twilio": "Telefonnummer im E.164-Format/SID der Telefonnummer/SID des Messaging-Dienstes, z. B. +19995550123/PNXXX/MGXXX", + "phone-number-pattern": "Ungültige Telefonnummer. Sollte im E.164-Format vorliegen, z. B. +19995550123.", + "phone-number-pattern-twilio": "Ungültige Telefonnummer. Sollte im E.164-Format/SID der Telefonnummer/SID des Messaging-Dienstes vorliegen, z. B. +19995550123/PNXXX/MGXXX.", "sms-message": "SMS-Nachricht", "sms-message-required": "SMS-Nachricht ist erforderlich.", "sms-message-max-length": "SMS-Nachricht darf nicht länger als 1600 Zeichen sein", - "twilio-account-sid": "Twilio Account SID", - "twilio-account-sid-required": "Twilio Account SID ist erforderlich", - "twilio-account-token": "Twilio Account Token", - "twilio-account-token-required": "Twilio Account Token ist erforderlich", + "twilio-account-sid": "Twilio-Konto SID", + "twilio-account-sid-required": "Twilio-Konto SID ist erforderlich", + "twilio-account-token": "Twilio-Konto-Token", + "twilio-account-token-required": "Twilio-Konto-Token ist erforderlich", "send-test-sms": "Test-SMS senden", "test-sms-sent": "Test-SMS wurde erfolgreich gesendet!", "security-settings": "Sicherheitseinstellungen", "password-policy": "Passwortrichtlinie", "minimum-password-length": "Minimale Passwortlänge", "minimum-password-length-required": "Minimale Passwortlänge ist erforderlich", - "minimum-password-length-range": "Minimale Passwortlänge sollte zwischen 6 und 50 Zeichen liegen", + "minimum-password-length-range": "Die minimale Passwortlänge muss zwischen 6 und 50 liegen", "maximum-password-length": "Maximale Passwortlänge", - "maximum-password-length-min": "Maximale Passwortlänge sollte mindestens 6 betragen", - "maximum-password-length-less-min": "Maximale Passwortlänge muss größer als die minimale Länge sein", - "minimum-uppercase-letters": "Minimale Anzahl an Großbuchstaben", - "minimum-uppercase-letters-range": "Minimale Anzahl an Großbuchstaben darf nicht negativ sein", - "minimum-lowercase-letters": "Minimale Anzahl an Kleinbuchstaben", - "minimum-lowercase-letters-range": "Minimale Anzahl an Kleinbuchstaben darf nicht negativ sein", - "minimum-digits": "Minimale Anzahl an Ziffern", - "minimum-digits-range": "Minimale Anzahl an Ziffern darf nicht negativ sein", - "minimum-special-characters": "Minimale Anzahl an Sonderzeichen", - "minimum-special-characters-range": "Minimale Anzahl an Sonderzeichen darf nicht negativ sein", + "maximum-password-length-min": "Die maximale Passwortlänge muss mindestens 6 betragen", + "maximum-password-length-less-min": "Die maximale Passwortlänge muss größer als die minimale sein", + "minimum-uppercase-letters": "Mindestanzahl an Großbuchstaben", + "minimum-uppercase-letters-range": "Die Mindestanzahl an Großbuchstaben darf nicht negativ sein", + "minimum-lowercase-letters": "Mindestanzahl an Kleinbuchstaben", + "minimum-lowercase-letters-range": "Die Mindestanzahl an Kleinbuchstaben darf nicht negativ sein", + "minimum-digits": "Mindestanzahl an Ziffern", + "minimum-digits-range": "Die Mindestanzahl an Ziffern darf nicht negativ sein", + "minimum-special-characters": "Mindestanzahl an Sonderzeichen", + "minimum-special-characters-range": "Die Mindestanzahl an Sonderzeichen darf nicht negativ sein", "password-expiration-period-days": "Passwort-Ablaufzeitraum in Tagen", "password-expiration-period-days-range": "Passwort-Ablaufzeitraum darf nicht negativ sein", "password-reuse-frequency-days": "Häufigkeit der Passwortwiederverwendung in Tagen", @@ -676,8 +676,8 @@ "alias": { "add": "Alias hinzufügen", "edit": "Alias bearbeiten", - "name": "Aliasname", - "name-required": "Aliasname ist erforderlich", + "name": "Alias-Name", + "name-required": "Alias-Name ist erforderlich", "duplicate-alias": "Ein Alias mit demselben Namen existiert bereits.", "filter-type-single-entity": "Einzelne Entität", "filter-type-entity-list": "Entitätsliste", @@ -864,15 +864,15 @@ "api-features": "API-Funktionen", "api-usage": "API-Nutzung", "alarm": "Alarm", - "alarms-created": "Erstellte Alarme", + "alarms-created": "Alarme erstellt", "queue-stats": "Warteschlangenstatistiken", "processing-failures-and-timeouts": "Verarbeitungsfehler und Zeitüberschreitungen", "exceptions": "Ausnahmen", - "alarms-created-daily-activity": "Tägliche Aktivität der Alarmerstellung", - "alarms-created-hourly-activity": "Stündliche Aktivität der Alarmerstellung", - "alarms-created-monthly-activity": "Monatliche Aktivität der Alarmerstellung", + "alarms-created-daily-activity": "Tägliche Aktivität der Alarm-Erstellung", + "alarms-created-hourly-activity": "Stündliche Aktivität der Alarm-Erstellung", + "alarms-created-monthly-activity": "Monatliche Aktivität der Alarm-Erstellung", "data-points": "Datenpunkte", - "data-points-storage-days": "Speichertage der Datenpunkte", + "data-points-storage-days": "Speicherzeitraum der Datenpunkte (in Tagen)", "device-api": "Geräte-API", "email": "E-Mail", "email-messages": "E-Mail-Nachrichten", @@ -1111,13 +1111,15 @@ "mistral-ai": "Mistral AI", "anthropic": "Anthropic", "amazon-bedrock": "Amazon Bedrock", - "github-models": "GitHub-Modelle" + "github-models": "GitHub-Modelle", + "ollama": "Ollama" }, "name-required": "Name ist erforderlich.", "name-max-length": "Der Name darf höchstens 255 Zeichen lang sein.", "provider": "Anbieter", "api-key": "API-Schlüssel", "api-key-required": "API-Schlüssel ist erforderlich.", + "api-key-open-ai-required": "API-Schlüssel ist erforderlich, wenn die offizielle OpenAI-API verwendet wird.", "project-id": "Projekt-ID", "project-id-required": "Projekt-ID ist erforderlich.", "location": "Standort", @@ -1147,24 +1149,41 @@ "top-p-hint": "Erstellt einen Pool der wahrscheinlichsten Tokens, aus denen das Modell auswählt. Höhere Werte erweitern den Pool, niedrigere verkleinern ihn.", "top-p-min-max": "Muss größer als 0 und maximal 1 sein.", "top-k": "Top K", - "top-k-hint": "Begrenzt die Auswahl des Modells auf die „K“ wahrscheinlichsten Tokens.", + "top-k-hint": "Begrenzt die Auswahl des Modells auf die \"K\" wahrscheinlichsten Tokens.", "top-k-min": "Muss 0 oder größer sein.", - "presence-penalty": "Strafe für Anwesenheit", + "presence-penalty": "Präsenzstrafe", "presence-penalty-hint": "Wendet eine feste Strafe auf die Wahrscheinlichkeit eines Tokens an, wenn es bereits im Text erschienen ist.", - "frequency-penalty": "Strafe für Häufigkeit", - "frequency-penalty-hint": "Verringert die Wahrscheinlichkeit eines Tokens basierend auf seiner Häufigkeit im Text.", + "frequency-penalty": "Frequenzstrafe", + "frequency-penalty-hint": "Reduziert die Wahrscheinlichkeit eines Tokens abhängig von seiner Häufigkeit im Text.", "max-output-tokens": "Maximale Ausgabetokens", - "max-output-tokens-min": "Muss größer als 0 sein.", - "max-output-tokens-hint": "Legt die maximale Anzahl an Tokens fest, die das Modell in einer Antwort generieren kann.", + "max-output-tokens-hint": "Legt die maximale Anzahl an Tokens fest, die das \nModell in einer Antwort generieren kann.", + "context-length": "Kontextlänge", + "context-length-hint": "Definiert die Größe des Kontextfensters in Tokens. Dieser Wert legt das Gesamtspeicherlimit für das Modell fest – einschließlich Benutzereingabe und generierter Antwort.", "endpoint": "Endpunkt", "endpoint-required": "Endpunkt ist erforderlich.", + "baseurl": "Basis-URL", + "baseurl-required": "Basis-URL ist erforderlich.", "service-version": "Service-Version", "check-connectivity": "Konnektivität prüfen", "check-connectivity-success": "Testanfrage war erfolgreich", "check-connectivity-failed": "Testanfrage fehlgeschlagen", - "no-model-matching": "Keine mit '{{entity}}' übereinstimmenden Modelle gefunden.", + "no-model-matching": "Keine Modelle gefunden, die mit '{{entity}}' übereinstimmen.", "model-required": "Modell ist erforderlich.", - "no-model-text": "Keine Modelle gefunden." + "no-model-text": "Keine Modelle gefunden.", + "authentication": "Authentifizierung", + "authentication-basic-hint": "Verwendet die Standard-HTTP-Basis-Authentifizierung. Benutzername und Passwort werden kombiniert, Base64-codiert und im \"Authorization\"-Header an den Ollama-Server gesendet.", + "authentication-token-hint": "Verwendet die Bearer-Token-Authentifizierung. Das bereitgestellte Token wird direkt im \"Authorization\"-Header an den Ollama-Server gesendet.", + "authentication-type": { + "none": "Keine", + "basic": "Basis", + "token": "Token" + }, + "username": "Benutzername", + "username-required": "Benutzername ist erforderlich.", + "password": "Passwort", + "password-required": "Passwort ist erforderlich.", + "token": "Token", + "token-required": "Token ist erforderlich." }, "confirm-on-exit": { "message": "Sie haben ungespeicherte Änderungen. Möchten Sie diese Seite wirklich verlassen?", @@ -1228,7 +1247,7 @@ "required-fields": "Erforderliche Felder fehlen" }, "content-type": { - "json": "Json", + "json": "JSON", "text": "Text", "binary": "Binär (Base64)" }, @@ -1261,11 +1280,11 @@ "add-customer-text": "Neuen Kunden hinzufügen", "no-customers-text": "Keine Kunden gefunden", "customer-details": "Kundendetails", - "delete-customer-title": "Möchten Sie den Kunden '{{customerTitle}}' wirklich löschen?", - "delete-customer-text": "Achtung, nach der Bestätigung werden der Kunde und alle zugehörigen Daten unwiederbringlich gelöscht.", - "delete-customers-title": "Möchten Sie { count, plural, =1 {1 Kunden} other {# Kunden} } wirklich löschen?", + "delete-customer-title": "Sind Sie sicher, dass Sie den Kunden '{{customerTitle}}' löschen möchten?", + "delete-customer-text": "Achtung: Nach der Bestätigung werden der Kunde und alle zugehörigen Daten unwiderruflich gelöscht.", + "delete-customers-title": "Sind Sie sicher, dass Sie { count, plural, =1 {1 Kunden} other {# Kunden} } löschen möchten?", "delete-customers-action-title": "{ count, plural, =1 {1 Kunden löschen} other {# Kunden löschen} }", - "delete-customers-text": "Achtung, nach der Bestätigung werden alle ausgewählten Kunden und alle zugehörigen Daten gelöscht.", + "delete-customers-text": "Achtung: Nach der Bestätigung werden alle ausgewählten Kunden und deren zugehörige Daten unwiderruflich gelöscht.", "manage-users": "Benutzer verwalten", "manage-assets": "Assets verwalten", "manage-devices": "Geräte verwalten", @@ -1578,13 +1597,13 @@ "time-prev-description": "Zeitstempel des vorherigen Werts;", "prev-orig-value-description": "ursprünglicher vorheriger Wert;", "aggregation": "Aggregation", - "aggregation-type-hint-common": "Aus Leistungsgründen ist die Berechnung aggregierter Werte nur für feste Zeitintervalle wie 'heutiger Tag', 'aktueller Monat' usw. verfügbar, nicht jedoch für gleitende Zeitfenster wie 'letzte 30 Minuten'.", + "aggregation-type-hint-common": "Aus Leistungsgründen ist die Aggregationsberechnung nur für feste Zeitintervalle wie \"aktueller Tag\", \"aktueller Monat\" usw. verfügbar und nicht für gleitende Zeitfenster wie \"letzte 30 Minuten\" oder \"letzte 24 Stunden\".", "aggregation-type-none-hint": "Letzten Wert übernehmen.", - "aggregation-type-min-hint": "Mindestwert innerhalb des ausgewählten Zeitfensters finden.", - "aggregation-type-max-hint": "Höchstwert innerhalb des ausgewählten Zeitfensters finden.", - "aggregation-type-avg-hint": "Durchschnittswert innerhalb des ausgewählten Zeitfensters berechnen.", - "aggregation-type-sum-hint": "Alle Werte der Datenpunkte im Zeitfenster summieren.", - "aggregation-type-count-hint": "Gesamtanzahl der Datenpunkte im Zeitfenster.", + "aggregation-type-min-hint": "Minimalwert unter den Datenpunkten innerhalb eines ausgewählten Zeitfensters ermitteln.", + "aggregation-type-max-hint": "Maximalwert unter den Datenpunkten innerhalb eines ausgewählten Zeitfensters ermitteln.", + "aggregation-type-avg-hint": "Durchschnittswert der Datenpunkte innerhalb eines ausgewählten Zeitfensters berechnen.", + "aggregation-type-sum-hint": "Summe aller Werte der Datenpunkte innerhalb eines ausgewählten Zeitfensters berechnen.", + "aggregation-type-count-hint": "Gesamtanzahl der Datenpunkte innerhalb eines ausgewählten Zeitfensters.", "delta-calculation": "Delta-Berechnung", "enable-delta-calculation": "Delta-Berechnung aktivieren", "enable-delta-calculation-hint": "Wenn aktiviert, wird der Wert basierend auf aggregierten Werten für ein ausgewähltes Zeitfenster und einen Vergleichszeitraum berechnet. Delta-Berechnung ist nur für historische Zeitfenster verfügbar, nicht für Echtzeitwerte.", @@ -1991,19 +2010,19 @@ "create-new-device-profile": "Neues erstellen!", "mqtt-device-topic-filters": "MQTT-Gerät-Topic-Filter", "mqtt-device-topic-filters-unique": "MQTT-Gerät-Topic-Filter müssen eindeutig sein.", - "mqtt-device-topic-filters-spark-plug": "MQTT Sparkplug B Edge-of-Network (EoN) Node.", - "mqtt-device-topic-filters-spark-plug-hint": "Erlaubt Verbindungen von EoN-Nodes mit Sparkplug B Nutzlast und Topic-Format.", - "mqtt-device-topic-filters-spark-plug-attribute-metric-names": "SparkPlug-Metriken zur Speicherung als Attribute.", - "mqtt-device-topic-filters-spark-plug-attribute-metric-names-hint": "Namen der SparkPlug-Metriken, die als Geräteattribute gespeichert werden. Alle anderen Metriken werden als Telemetrie gespeichert.", - "mqtt-device-payload-type": "MQTT-Geräte-Nutzlast", + "mqtt-device-topic-filters-spark-plug": "MQTT Sparkplug B Edge-of-Network (EoN)-Knoten.", + "mqtt-device-topic-filters-spark-plug-hint": "Erlaubt Verbindungen von EoN-Knoten mit Sparkplug B Payload- und Topic-Format.", + "mqtt-device-topic-filters-spark-plug-attribute-metric-names": "SparkPlug-Metriken, die als Attribute gespeichert werden.", + "mqtt-device-topic-filters-spark-plug-attribute-metric-names-hint": "Namen der SparkPlug-Metriken, die als Geräteattribute gespeichert werden. Alle anderen Metriken werden als Gerätetelemetrie gespeichert.", + "mqtt-device-payload-type": "MQTT-Geräte-Payload", "mqtt-device-payload-type-json": "JSON", "mqtt-device-payload-type-proto": "Protobuf", - "mqtt-enable-compatibility-with-json-payload-format": "Kompatibilität mit anderen Nutzlast-Formaten aktivieren.", - "mqtt-enable-compatibility-with-json-payload-format-hint": "Wenn aktiviert, wird standardmäßig das Protobuf-Format verwendet. Bei Parsing-Fehlern wird JSON genutzt. Nützlich für die Abwärtskompatibilität bei Firmware-Updates. Dieser Modus kann die Leistung leicht beeinträchtigen und sollte nach Abschluss der Updates deaktiviert werden.", - "mqtt-use-json-format-for-default-downlink-topics": "JSON-Format für Standard-Downlink-Themen verwenden", - "mqtt-use-json-format-for-default-downlink-topics-hint": "Wenn aktiviert, wird das JSON-Format für die Standard-Downlink-Themen verwendet, z.B.: v1/devices/me/attributes/response/$request_id. Neue v2-Themen sind davon nicht betroffen.", - "mqtt-send-ack-on-validation-exception": "PUBACK bei Validierungsfehler senden", - "mqtt-send-ack-on-validation-exception-hint": "Standardmäßig wird die Sitzung bei einem Validierungsfehler geschlossen. Wenn aktiviert, wird stattdessen eine Bestätigung gesendet.", + "mqtt-enable-compatibility-with-json-payload-format": "Kompatibilität mit anderen Payload-Formaten aktivieren.", + "mqtt-enable-compatibility-with-json-payload-format-hint": "Wenn aktiviert, verwendet die Plattform standardmäßig das Protobuf-Payload-Format. Falls das Parsing fehlschlägt, versucht die Plattform, das JSON-Format zu verwenden. Nützlich für Abwärtskompatibilität bei Firmware-Updates. Beispielsweise nutzt die ursprüngliche Firmware-Version JSON, während die neue Version Protobuf verwendet. Während des Firmware-Update-Prozesses für die gesamte Geräteflotte ist es erforderlich, beide Formate gleichzeitig zu unterstützen. Der Kompatibilitätsmodus führt zu einer geringen Performanceeinbuße und sollte deaktiviert werden, sobald alle Geräte aktualisiert sind.", + "mqtt-use-json-format-for-default-downlink-topics": "JSON-Format für Standard-Downlink-Topics verwenden", + "mqtt-use-json-format-for-default-downlink-topics-hint": "Wenn aktiviert, verwendet die Plattform das JSON-Payload-Format zum Übertragen von Attributen und RPC über folgende Topics: v1/devices/me/attributes/response/$request_id, v1/devices/me/attributes, v1/devices/me/rpc/request/$request_id, v1/devices/me/rpc/response/$request_id. Diese Einstellung beeinflusst nicht die Verwendung neuer (v2) Topics: v2/a/res/$request_id, v2/a, v2/r/req/$request_id, v2/r/res/$request_id. Dabei ist $request_id ein ganzzahliger Anfrage-Identifier.", + "mqtt-send-ack-on-validation-exception": "PUBACK bei PUBLISH-Validierungsfehler senden", + "mqtt-send-ack-on-validation-exception-hint": "Standardmäßig beendet die Plattform die MQTT-Sitzung bei einem Validierungsfehler. Wenn aktiviert, sendet die Plattform stattdessen eine Bestätigung (PUBACK), anstatt die Sitzung zu schließen.", "mqtt-protocol-version": "Protokollversion", "snmp-add-mapping": "SNMP-Zuordnung hinzufügen", "snmp-mapping-not-configured": "Keine Zuordnung für OID zu Zeitreihen/Telemetrie konfiguriert", @@ -2038,11 +2057,11 @@ "rpc-request-proto-schema": "RPC-Anfrage-Protoschema", "rpc-request-proto-schema-required": "RPC-Anfrage-Protoschema ist erforderlich.", "rpc-request-proto-schema-hint": "RPC-Anforderungsnachrichten müssen die Felder 'string method = 1;', 'int32 requestId = 2;' und 'params = 3' enthalten.", - "not-valid-pattern-topic-filter": "Ungültiges Muster im Topic-Filter", - "not-valid-single-character": "Ungültige Verwendung eines Single-Level-Wildcards", - "not-valid-multi-character": "Ungültige Verwendung eines Multi-Level-Wildcards", - "single-level-wildcards-hint": "[+] kann jedes Topic-Level ersetzen. Beispiel: v1/devices/+/telemetry.", - "multi-level-wildcards-hint": "[#] ersetzt mehrere Ebenen und muss am Ende des Topics stehen. Beispiel: # oder v1/devices/me/#.", + "not-valid-pattern-topic-filter": "Ungültiges Topic-Filter-Muster", + "not-valid-single-character": "Ungültige Verwendung eines einstelligen Platzhalters", + "not-valid-multi-character": "Ungültige Verwendung eines mehrstufigen Platzhalters", + "single-level-wildcards-hint": "[+] eignet sich für jede Ebene eines Topic-Filters. Beispiel: v1/devices/+/telemetry oder +/devices/+/attributes.", + "multi-level-wildcards-hint": "[#] kann das gesamte Topic-Filter ersetzen und muss das letzte Symbol im Topic sein. Beispiel: # oder v1/devices/me/#.", "alarm-rules": "Alarmregeln", "alarm-rules-with-count": "Alarmregeln ({{count}})", "no-alarm-rules": "Keine Alarmregeln konfiguriert", @@ -2050,8 +2069,8 @@ "edit-alarm-rule": "Alarmregel bearbeiten", "alarm-type": "Alarmtyp", "alarm-type-required": "Alarmtyp ist erforderlich.", - "alarm-type-unique": "Alarmtyp muss innerhalb der Alarmregeln des Geräteprofils eindeutig sein.", - "alarm-type-max-length": "Alarmtyp sollte weniger als 256 Zeichen enthalten", + "alarm-type-unique": "Der Alarmtyp muss innerhalb der Geräteprofil-Alarmregeln eindeutig sein.", + "alarm-type-max-length": "Alarmtyp darf maximal 256 Zeichen lang sein", "create-alarm-pattern": "{{alarmType}} Alarm erstellen", "create-alarm-rules": "Alarmregeln erstellen", "no-create-alarm-rules": "Keine Erstellungsbedingungen konfiguriert", @@ -2072,16 +2091,16 @@ "advanced-settings": "Erweiterte Einstellungen", "alarm-rule-additional-info": "Zusätzliche Informationen", "edit-alarm-rule-additional-info": "Zusätzliche Informationen bearbeiten", - "alarm-rule-additional-info-placeholder": "Bitte Kommentare und Anpassungen angeben, die unter 'Zusätzliche Informationen' bei Alarmdetails angezeigt werden.", - "alarm-rule-additional-info-hint": "Hinweis: Verwenden Sie ${keyName} zur Ersetzung von Attribut- oder Telemetriedaten.", + "alarm-rule-additional-info-placeholder": "Bitte geben Sie hier Ihre Kommentare und Anpassungen ein, um sie unter 'Zusätzliche Informationen' in den Alarmdetails anzuzeigen.", + "alarm-rule-additional-info-hint": "Hinweis: Verwenden Sie ${keyName}, um Werte von Attribut- oder Telemetrie-Schlüsseln zu ersetzen, die in der Alarmregel-Bedingung verwendet werden.", "alarm-rule-mobile-dashboard": "Mobiles Dashboard", - "alarm-rule-mobile-dashboard-hint": "Wird von der mobilen App als Alarminformationen-Dashboard genutzt", + "alarm-rule-mobile-dashboard-hint": "Wird von der mobilen Anwendung als Dashboard für Alarmdetails verwendet", "alarm-rule-no-mobile-dashboard": "Kein Dashboard ausgewählt", - "propagate-alarm": "Alarm auf verbundene Entitäten propagieren", + "propagate-alarm": "Alarm an zugehörige Entitäten weiterleiten", "alarm-rule-relation-types-list": "Beziehungstypen", - "alarm-rule-relation-types-list-hint": "Definiert Beziehungstypen zur Filterung der verbundenen Entitäten. Wenn nicht gesetzt, wird der Alarm an alle verbundenen Entitäten propagiert.", - "propagate-alarm-to-owner": "Alarm an Eigentümer der Entität (Kunde oder Mandant) propagieren", - "propagate-alarm-to-tenant": "Alarm an Mandant propagieren", + "alarm-rule-relation-types-list-hint": "Definiert Beziehungstypen zur Filterung der zugehörigen Entitäten. Wenn nicht gesetzt, wird der Alarm an alle zugehörigen Entitäten weitergeleitet.", + "propagate-alarm-to-owner": "Alarm an Eigentümer der Entität weiterleiten (Kunde oder Tenant)", + "propagate-alarm-to-tenant": "Alarm an den Tenant weiterleiten", "alarm-rule-condition": "Alarmregelbedingung", "enter-alarm-rule-condition-prompt": "Bitte fügen Sie eine Alarmregelbedingung hinzu", "edit-alarm-rule-condition": "Alarmregelbedingung bearbeiten", @@ -2237,28 +2256,28 @@ "tqs": "TQS: Sowohl TCP- als auch SMS-Verbindungen aktiv; TCP im Queue-Modus, SMS im Standardmodus (nicht unterstützt seit LWM2M 1.1)", "sq": "SQ: SMS-Verbindung im Queue-Modus (nicht unterstützt seit LWM2M 1.1)" }, - "binding-tooltip": "Liste der unterstützten Bindungsmodi im \"binding\"-Ressourcenelement des LwM2M-Serverobjekts - /1/x/7.\nMehrere Übertragungsmodi sind möglich, aber nur einer wird während einer Transport-Session genutzt.", + "binding-tooltip": "Dies ist die Liste im \"binding\"-Ressourcenelement des LwM2M-Serverobjekts – /1/x/7.\nGibt die unterstützten Binding-Modi im LwM2M-Client an.\nDieser Wert SOLLTE mit dem Wert in der Ressource „Supported Binding and Modes“ im Geräteobjekt (/3/0/16) übereinstimmen.\nObwohl mehrere Transports unterstützt werden, kann während einer gesamten Transportsitzung nur ein Transport-Binding verwendet werden.\nBeispiel: Wenn sowohl UDP als auch SMS unterstützt werden, können der LwM2M-Client und der LwM2M-Server während der gesamten Transportsitzung entweder über UDP oder SMS kommunizieren.", "bootstrap-server": "Bootstrap-Server", "lwm2m-server": "LwM2M-Server", "include-bootstrap-server": "Bootstrap-Server-Updates einbeziehen", "bootstrap-update-title": "Bootstrap-Server ist bereits konfiguriert. Möchten Sie die Updates wirklich ausschließen?", - "bootstrap-update-text": "Vorsicht: Nach der Bestätigung gehen die Konfigurationsdaten des Bootstrap-Servers verloren.", + "bootstrap-update-text": "Achtung: Nach der Bestätigung werden die Konfigurationsdaten des Bootstrap-Servers unwiderruflich gelöscht.", "server-host": "Host", "server-host-required": "Host ist erforderlich.", "server-port": "Port", "server-port-required": "Port ist erforderlich.", - "server-port-pattern": "Port muss eine positive Ganzzahl sein.", - "server-port-range": "Port sollte im Bereich von 1 bis 65535 liegen.", + "server-port-pattern": "Port muss eine positive ganze Zahl sein.", + "server-port-range": "Port muss im Bereich von 1 bis 65535 liegen.", "server-public-key": "Öffentlicher Schlüssel des Servers", "server-public-key-required": "Öffentlicher Schlüssel des Servers ist erforderlich.", - "client-hold-off-time": "Wartezeit des Clients", - "client-hold-off-time-required": "Wartezeit des Clients ist erforderlich.", - "client-hold-off-time-pattern": "Wartezeit des Clients muss eine positive Ganzzahl sein.", - "client-hold-off-time-tooltip": "Client-Wartezeit nur bei Verwendung eines Bootstrap-Servers", - "account-after-timeout": "Konto nach Zeitüberschreitung", - "account-after-timeout-required": "Konto nach Zeitüberschreitung ist erforderlich.", - "account-after-timeout-pattern": "Konto nach Zeitüberschreitung muss eine positive Ganzzahl sein.", - "account-after-timeout-tooltip": "Wert für Konto nach Zeitüberschreitung beim Bootstrap-Server.", + "client-hold-off-time": "Verzögerungszeit (Hold Off Time)", + "client-hold-off-time-required": "Verzögerungszeit ist erforderlich.", + "client-hold-off-time-pattern": "Verzögerungszeit muss eine positive ganze Zahl sein.", + "client-hold-off-time-tooltip": "Verzögerungszeit für den Einsatz mit einem Bootstrap-Server", + "account-after-timeout": "Aktivierung nach Zeitüberschreitung", + "account-after-timeout-required": "Aktivierung nach Zeitüberschreitung ist erforderlich.", + "account-after-timeout-pattern": "Der Wert muss eine positive ganze Zahl sein.", + "account-after-timeout-tooltip": "Bootstrap-Server-Aktivierung nach dem durch diese Ressource angegebenen Timeout-Wert.", "server-type": "Servertyp", "add-new-server-title": "Neue Serverkonfiguration hinzufügen", "add-server-config": "Serverkonfiguration hinzufügen", @@ -2267,25 +2286,25 @@ "others-tab": "Weitere Einstellungen", "ota-update": "OTA-Update", "use-object-19-for-ota-update": "Objekt 19 für OTA-Dateimetadaten verwenden (Prüfsumme, Größe, Version, Name)", - "use-object-19-for-ota-update-hint": "Verwenden Sie Resource ObjectId = 19 für OTA-Updates: Firmware → InstanceId = 65534, Software → InstanceId = 65535. Das Datenformat ist JSON, codiert in Base64. Dieses JSON enthält OTA-Dateimetadaten (Dateiinformationen): „Checksum“ (SHA256). Zusätzliche Felder: „Title“ (OTA-Name), „Version“ (OTA-Version), „File Name“ (Dateiname zur Speicherung auf dem Client), „File Size“ (OTA-Größe in Bytes).", - "client-strategy": "Client-Strategie beim Verbinden", + "use-object-19-for-ota-update-hint": "Verwenden Sie Resource ObjectId = 19 für OTA-Updates: FirmWare → InstanceId = 65534, SoftWare → InstanceId = 65535. Das Datenformat ist JSON, eingebettet in Base64. Dieses JSON enthält OTA-Dateimetadaten (Dateiinformationen): \"Prüfsumme\" (SHA256). Zusätzliche Felder: \"Titel\" (OTA-Name), \"Version\" (OTA-Version), \"Dateiname\" (Dateiname für die Speicherung auf dem Client), \"Dateigröße\" (OTA-Größe in Byte).", + "client-strategy": "Client-Strategie beim Verbindungsaufbau", "client-strategy-label": "Strategie", - "client-strategy-only-observe": "Nur Beobachtungsanfragen nach der ersten Verbindung", - "client-strategy-read-all": "Alle Ressourcen lesen und beobachten nach der Registrierung", + "client-strategy-only-observe": "Nur Observe-Anfrage an den Client nach der ersten Verbindung", + "client-strategy-read-all": "Alle Ressourcen lesen und Observe-Anfrage nach der Registrierung senden", "fw-update": "Firmware-Update", - "fw-update-strategy": "Firmware-Update-Strategie", - "fw-update-strategy-data": "Firmware-Update als Binärdatei mit Objekt 19 und Ressource 0 (Daten) übertragen", - "fw-update-strategy-package": "Firmware-Update als Binärdatei mit Objekt 5 und Ressource 0 (Paket) übertragen", - "fw-update-strategy-package-uri": "Automatisch eindeutige CoAP-URL generieren, um das Paket herunterzuladen, und als Objekt 5 und Ressource 1 (Paket-URI) übertragen", + "fw-update-strategy": "Strategie für Firmware-Update", + "fw-update-strategy-data": "Firmware-Update als Binärdatei über Objekt 19 und Ressource 0 (Data) übertragen", + "fw-update-strategy-package": "Firmware-Update als Binärdatei über Objekt 5 und Ressource 0 (Package) übertragen", + "fw-update-strategy-package-uri": "Automatisch eindeutige CoAP-URL generieren und Firmware-Update über Objekt 5 und Ressource 1 (Package URI) übertragen", "sw-update": "Software-Update", - "sw-update-strategy": "Software-Update-Strategie", - "sw-update-strategy-package": "Binärdatei mit Objekt 9 und Ressource 2 (Paket) übertragen", - "sw-update-strategy-package-uri": "Automatisch eindeutige CoAP-URL generieren, um das Paket herunterzuladen, und Software-Update mit Objekt 9 und Ressource 3 (Paket-URI) übertragen", - "fw-update-resource": "Firmware-Update CoAP-Ressource", - "fw-update-resource-required": "Firmware-Update CoAP-Ressource ist erforderlich.", - "sw-update-resource": "Software-Update CoAP-Ressource", - "sw-update-resource-required": "Software-Update CoAP-Ressource ist erforderlich.", - "config-json-tab": "JSON-Konfigurationsprofil Gerät", + "sw-update-strategy": "Strategie für Software-Update", + "sw-update-strategy-package": "Binärdatei über Objekt 9 und Ressource 2 (Package) übertragen", + "sw-update-strategy-package-uri": "Automatisch eindeutige CoAP-URL generieren und Software-Update über Objekt 9 und Ressource 3 (Package URI) übertragen", + "fw-update-resource": "CoAP-Ressource für Firmware-Update", + "fw-update-resource-required": "CoAP-Ressource für Firmware-Update ist erforderlich.", + "sw-update-resource": "CoAP-Ressource für Software-Update", + "sw-update-resource-required": "CoAP-Ressource für Software-Update ist erforderlich.", + "config-json-tab": "JSON-Konfigurationsprofil für Gerät", "attributes-name": { "min-period": "Minimale Periode", "max-period": "Maximale Periode", @@ -2810,20 +2829,20 @@ "server-attributes-placeholder": "Server-Attribute", "timeseries-placeholder": "Zeitreihen", "target-entity": "Zielentität", - "attributes-propagation": "Attributübertragung", - "attributes-propagation-hint": "Die Entitätsansicht kopiert automatisch die angegebenen Attribute von der Zielentität jedes Mal, wenn Sie diese Entitätsansicht speichern oder aktualisieren. Aus Leistungsgründen werden Zielentitätsattribute nicht bei jeder Attributänderung auf die Entitätsansicht übertragen. Sie können die automatische Übertragung aktivieren, indem Sie einen 'copy to view'-Regelknoten in Ihrer Regelkette konfigurieren und 'Post attributes' und 'Attributes Updated'-Nachrichten an diesen neuen Regelknoten verlinken.", + "attributes-propagation": "Attributweiterleitung", + "attributes-propagation-hint": "Die Entitätsansicht kopiert automatisch die angegebenen Attribute von der Zielentität jedes Mal, wenn Sie diese Entitätsansicht speichern oder aktualisieren. Aus Leistungsgründen werden die Attribute der Zielentität nicht bei jeder Attributänderung automatisch in die Entitätsansicht übernommen. Sie können eine automatische Weiterleitung aktivieren, indem Sie den Regelknoten \"In Ansicht kopieren\" in Ihrer Regelkette konfigurieren und die Nachrichten \"Post attributes\" und \"Attributes Updated\" mit diesem neuen Regelknoten verknüpfen.", "timeseries-data": "Zeitreihendaten", - "timeseries-data-hint": "Konfigurieren Sie die Zeitreihendatenschlüssel der Zielentität, die für die Entitätsansicht zugänglich sein werden. Diese Zeitreihendaten sind schreibgeschützt.", - "search": "Entitätsansichten suchen", - "selected-entity-views": "{ count, plural, =1 {1 Entitätsansicht} other {# Entitätsansichten} } ausgewählt", - "assign-entity-view-to-edge": "Entitätsansicht(en) Edge zuweisen", - "assign-entity-view-to-edge-text": "Bitte wählen Sie die Entitätsansichten aus, die dem Edge zugewiesen werden sollen", - "unassign-entity-view-from-edge-title": "Sind Sie sicher, dass Sie die Entitätsansicht '{{entityViewName}}' von Edge entfernen möchten?", - "unassign-entity-view-from-edge-text": "Nach der Bestätigung wird die Entitätsansicht von Edge entfernt und ist nicht mehr zugänglich.", - "unassign-entity-views-from-edge-action-title": "{ count, plural, =1 {1 Entitätsansicht} other {# Entitätsansichten} } von Edge entfernen", - "unassign-entity-view-from-edge": "Entitätsansicht von Edge entfernen", - "unassign-entity-views-from-edge-title": "Sind Sie sicher, dass Sie { count, plural, =1 {1 Entitätsansicht} other {# Entitätsansichten} } von Edge entfernen möchten?", - "unassign-entity-views-from-edge-text": "Nach der Bestätigung werden alle ausgewählten Entitätsansichten von Edge entfernt und sind nicht mehr zugänglich." + "timeseries-data-hint": "Konfigurieren Sie die Zeitreihenschlüssel der Zielentität, die in der Entitätsansicht verfügbar sein sollen. Diese Zeitreihendaten sind schreibgeschützt.", + "search": "Entitätssichten suchen", + "selected-entity-views": "{ count, plural, =1 {1 Entitätssicht} other {# Entitätssichten} } ausgewählt", + "assign-entity-view-to-edge": "Entitätssicht(en) einer Edge zuweisen", + "assign-entity-view-to-edge-text": "Bitte wählen Sie die Entitätssichten aus, die der Edge zugewiesen werden sollen", + "unassign-entity-view-from-edge-title": "Möchten Sie die Entitätsansicht '{{entityViewName}}' wirklich von der Edge entfernen?", + "unassign-entity-view-from-edge-text": "Nach der Bestätigung wird die Entitätsansicht entfernt und ist auf der Edge nicht mehr verfügbar.", + "unassign-entity-views-from-edge-action-title": "{ count, plural, =1 {1 Entitätsansicht von der Edge entfernen} other {# Entitätssichten von der Edge entfernen} }", + "unassign-entity-view-from-edge": "Entitätsansicht entfernen", + "unassign-entity-views-from-edge-title": "Möchten Sie { count, plural, =1 {1 Entitätssicht} other {# Entitätssichten} } wirklich entfernen?", + "unassign-entity-views-from-edge-text": "Nach der Bestätigung werden alle ausgewählten Entitätssichten entfernt und sind auf der Edge nicht mehr verfügbar." }, "event": { "event-type": "Ereignistyp", @@ -3041,15 +3060,15 @@ "edit": "Filter bearbeiten", "name": "Filtername", "name-required": "Filtername ist erforderlich.", - "duplicate-filter": "Ein Filter mit demselben Namen existiert bereits.", + "duplicate-filter": "Ein Filter mit demselben Namen ist bereits vorhanden.", "filters": "Filter", "unable-delete-filter-title": "Filter kann nicht gelöscht werden", - "unable-delete-filter-text": "Der Filter '{{filter}}' kann nicht gelöscht werden, da er von folgenden Widget(s) verwendet wird:
{{widgetsList}}", - "duplicate-filter-error": "Doppelter Filter gefunden '{{filter}}'.
Filter müssen innerhalb des Dashboards eindeutig sein.", + "unable-delete-filter-text": "Filter '{{filter}}' kann nicht gelöscht werden, da er von folgendem/n Widget(s) verwendet wird:
{{widgetsList}}", + "duplicate-filter-error": "Doppelter Filter gefunden: '{{filter}}'.
Filter müssen innerhalb des Dashboards eindeutig sein.", "missing-key-filters-error": "Schlüsselfilter fehlt für Filter '{{filter}}'.", "filter": "Filter", "editable": "Bearbeitbar", - "editable-hint": "Benutzern erlauben, den Filterwert in Dashboards zu ändern.", + "editable-hint": "Ermöglicht dem Benutzer, den Filterwert in Dashboards zu ändern.", "no-filters-found": "Keine Filter gefunden.", "no-filter-text": "Kein Filter angegeben", "add-filter-prompt": "Bitte Filter hinzufügen", @@ -4303,7 +4322,7 @@ }, "profile": { "profile": "Profil", - "last-login-time": "Letzte Anmeldung", + "last-login-time": "Letzter Login", "change-password": "Passwort ändern", "current-password": "Aktuelles Passwort", "copy-jwt-token": "JWT-Token kopieren", @@ -4478,7 +4497,8 @@ "jks": "JKS", "js-module": "JS-Modul", "lwm2m-model": "LWM2M-Modell", - "pkcs-12": "PKCS #12" + "pkcs-12": "PKCS #12", + "general": "Allgemein" }, "resource-sub-type": "Subtyp", "sub-type": { @@ -4486,7 +4506,12 @@ "scada-symbol": "SCADA-Symbol", "extension": "Erweiterung", "module": "Modul" - } + }, + "resource-is-in-use": "Ressource wird von anderen Entitäten verwendet", + "resources-are-in-use": "Ressourcen werden von anderen Entitäten verwendet", + "resource-is-in-use-text": "Die Ressource '{{title}}' wurde nicht gelöscht, da sie von folgenden Entitäten verwendet wird:", + "resources-are-in-use-text": "Nicht alle Ressourcen wurden gelöscht, da sie von anderen Entitäten verwendet werden.
Sie können die referenzierten Entitäten anzeigen, indem Sie auf die Schaltfläche Referenzen in der entsprechenden Ressourcenzeile klicken.
Wenn Sie diese Ressourcen dennoch löschen möchten, wählen Sie sie in der Tabelle unten aus und klicken Sie auf die Schaltfläche Ausgewählte löschen.", + "delete-resource-in-use-text": "Wenn Sie die Ressource dennoch löschen möchten, klicken Sie auf die Schaltfläche Trotzdem löschen." }, "javascript": { "add": "JavaScript-Ressource hinzufügen", @@ -4742,24 +4767,24 @@ "send-attributes-deleted-notification": "Benachrichtigung bei gelöschten Attributen senden", "send-attributes-deleted-notification-hint": "Sendet Benachrichtigung über gelöschte Attribute als separate Nachricht an die Regelmaschinen-Warteschlange.", "update-attributes-only-on-value-change": "Attribute nur bei Wertänderung speichern", - "update-attributes-only-on-value-change-hint": "Aktualisiert Attribute bei jeder eingehenden Nachricht, unabhängig von Wertänderung. Erhöht API-Nutzung und verringert Leistung.", - "update-attributes-only-on-value-change-hint-enabled": "Aktualisiert Attribute nur bei Wertänderung. Keine Aktualisierung von Zeitstempel oder Änderungsbenachrichtigung bei gleichem Wert.", + "update-attributes-only-on-value-change-hint": "Aktualisiert die Attribute bei jeder eingehenden Nachricht, unabhängig davon, ob sich deren Wert geändert hat. Erhöht die API-Nutzung und verringert die Leistung.", + "update-attributes-only-on-value-change-hint-enabled": "Aktualisiert die Attribute nur, wenn sich deren Wert geändert hat. Wenn der Wert unverändert bleibt, werden weder der Attribut-Zeitstempel noch eine Änderungsbenachrichtigung gesendet.", "fetch-credentials-to-metadata": "Zugangsdaten in Metadaten übernehmen", - "notify-device-on-update-hint": "Wenn aktiviert, erzwingt Benachrichtigung an das Gerät bei Attribut-Update. Bei Deaktivierung erfolgt Steuerung über Metadatenparameter 'notifyDevice'.", - "notify-device-on-delete-hint": "Wenn aktiviert, erzwingt Benachrichtigung an das Gerät bei Attribut-Entfernung. Bei Deaktivierung erfolgt Steuerung über Metadatenparameter 'notifyDevice'.", - "latest-timeseries": "Neueste Zeitreihenschlüssel", + "notify-device-on-update-hint": "Wenn aktiviert, wird das Gerät über die Aktualisierung gemeinsamer Attribute zwangsweise benachrichtigt. Wenn deaktiviert, steuert das Metadatenfeld 'notifyDevice' im eingehenden Nachrichtenkontext das Benachrichtigungsverhalten. Um die Benachrichtigung zu deaktivieren, muss der Parameter 'notifyDevice' auf 'false' gesetzt sein. In allen anderen Fällen wird eine Benachrichtigung ausgelöst.", + "notify-device-on-delete-hint": "Wenn aktiviert, wird das Gerät über das Entfernen gemeinsamer Attribute zwangsweise benachrichtigt. Wenn deaktiviert, steuert das Metadatenfeld 'notifyDevice' im eingehenden Nachrichtenkontext das Verhalten. Um die Benachrichtigung zu aktivieren, muss der Parameter 'notifyDevice' auf 'true' gesetzt sein. In allen anderen Fällen wird keine Benachrichtigung gesendet.", + "latest-timeseries": "Neueste Zeitreihendatenschlüssel", "timeseries-keys": "Zeitreihenschlüssel", - "timeseries-keys-required": "Mindestens ein Zeitreihenschlüssel muss ausgewählt werden.", + "timeseries-keys-required": "Mindestens ein Zeitreihenschlüssel muss ausgewählt sein.", "add-timeseries-key": "Zeitreihenschlüssel hinzufügen", "add-message-field": "Nachrichtenfeld hinzufügen", - "relation-search-parameters": "Beziehungs-Suchparameter", + "relation-search-parameters": "Suchparameter für Beziehungen", "relation-parameters": "Beziehungsparameter", "add-metadata-field": "Metadatenfeld hinzufügen", "data-keys": "Feldnamen der Nachricht", "copy-from": "Kopieren von", "data-to-metadata": "Daten zu Metadaten", "metadata-to-data": "Metadaten zu Daten", - "use-regular-expression-hint": "Verwenden Sie reguläre Ausdrücke, um Schlüssel anhand eines Musters zu kopieren.\n\nTipps & Tricks:\nDrücken Sie 'Enter', um die Eingabe des Feldnamens abzuschließen.\nDrücken Sie 'Rücktaste', um den Feldnamen zu löschen. Mehrere Feldnamen werden unterstützt.", + "use-regular-expression-hint": "Verwenden Sie reguläre Ausdrücke, um Schlüssel anhand von Mustern zu kopieren.\n\nTipps & Tricks:\nDrücken Sie 'Enter', um die Eingabe eines Feldnamens abzuschließen.\nDrücken Sie 'Rücktaste', um einen Feldnamen zu löschen. Mehrere Feldnamen werden unterstützt.", "interval": "Intervall", "interval-required": "Intervall ist erforderlich", "interval-hint": "Deduplizierungsintervall in Sekunden.", @@ -4826,13 +4851,13 @@ "fields-mapping-hint": "Wenn das Nachrichtenfeld auf $entityId gesetzt ist, wird die ID des Absenders in die angegebene Spalte gespeichert.", "relations-query-config-direction-suffix": "Absender", "profile-name": "Profilname", - "fetch-circle-parameter-info-from-metadata-hint": "Das Metadatenfeld '{{perimeterKeyName}}' sollte folgendes Format haben: {\"latitude\":48.196, \"longitude\":24.6532, \"radius\":100.0, \"radiusUnit\":\"METER\"}", - "fetch-poligon-parameter-info-from-metadata-hint": "Das Metadatenfeld '{{perimeterKeyName}}' sollte folgendes Format haben: [[48.19736,24.65235],[48.19800,24.65060],...,[48.19849,24.65420]]", - "short-templatization-tooltip": "Verwenden Sie $[messageKey] für Nachrichtenwerte und ${metadataKey} für Metadatenwerte.", + "fetch-circle-parameter-info-from-metadata-hint": "Das Metadatenfeld '{{perimeterKeyName}}' muss im folgenden Format definiert sein: {\"latitude\":48.196, \"longitude\":24.6532, \"radius\":100.0, \"radiusUnit\":\"METER\"}", + "fetch-poligon-parameter-info-from-metadata-hint": "Das Metadatenfeld '{{perimeterKeyName}}' muss im folgenden Format definiert sein: [[48.19736,24.65235],[48.19800,24.65060],...,[48.19849,24.65420]]", + "short-templatization-tooltip": "Verwenden Sie $[messageKey], um einen Wert aus der Nachricht zu extrahieren, und ${metadataKey}, um einen Wert aus den Metadaten zu extrahieren.", "fields-mapping-required": "Mindestens eine Feldzuordnung muss angegeben werden.", "at-least-one-field-required": "Mindestens ein Eingabefeld muss einen Wert enthalten.", - "originator-fields-sv-map-hint": "Zielschlüsselfelder unterstützen Templatisierung. Verwenden Sie $[messageKey] oder ${metadataKey}.", - "sv-map-hint": "Nur Zielschlüsselfelder unterstützen Templatisierung. Verwenden Sie $[messageKey] oder ${metadataKey}.", + "originator-fields-sv-map-hint": "Zielschlüsselfelder unterstützen Templatisierung. Verwenden Sie $[messageKey], um einen Wert aus der Nachricht zu extrahieren, und ${metadataKey}, um einen Wert aus den Metadaten zu extrahieren.", + "sv-map-hint": "Nur Zielschlüsselfelder unterstützen Templatisierung. Verwenden Sie $[messageKey], um einen Wert aus der Nachricht zu extrahieren, und ${metadataKey}, um einen Wert aus den Metadaten zu extrahieren.", "source-field": "Quellfeld", "source-field-required": "Quellfeld ist erforderlich.", "originator-source": "Absenderquelle", @@ -5436,11 +5461,11 @@ "prompt-settings": "Prompt-Einstellungen", "prompt-settings-hint": "Der optionale System-Prompt definiert die allgemeine Rolle und Einschränkungen der KI, während der Benutzer-Prompt die spezifische Aufgabe beschreibt. Beide Felder unterstützen auch die Verwendung von Templates.", "system-prompt": "System-Prompt", - "system-prompt-max-length": "Der System-Prompt darf maximal 500.000 Zeichen lang sein.", + "system-prompt-max-length": "Der System-Prompt darf maximal 10.000 Zeichen lang sein.", "system-prompt-blank": "Der System-Prompt darf nicht leer sein.", "user-prompt": "Benutzer-Prompt", "user-prompt-required": "Benutzer-Prompt ist erforderlich.", - "user-prompt-max-length": "Der Benutzer-Prompt darf maximal 500.000 Zeichen lang sein.", + "user-prompt-max-length": "Der Benutzer-Prompt darf maximal 10.000 Zeichen lang sein.", "user-prompt-blank": "Der Benutzer-Prompt darf nicht leer sein.", "response-format": "Antwortformat", "response-text": "Text", @@ -5457,7 +5482,8 @@ "timeout-required": "Zeitüberschreitung ist erforderlich", "timeout-validation": "Muss zwischen 1 Sekunde und 10 Minuten liegen.", "force-acknowledgement": "Erzwinge Bestätigung", - "force-acknowledgement-hint": "Wenn aktiviert, wird die eingehende Nachricht sofort bestätigt. Die Antwort des Modells wird dann als separate, neue Nachricht eingereiht." + "force-acknowledgement-hint": "Wenn aktiviert, wird die eingehende Nachricht sofort bestätigt. Die Antwort des Modells wird dann als separate, neue Nachricht eingereiht.", + "ai-resources": "KI-Ressourcen" } }, "timezone": { @@ -5987,9 +6013,10 @@ "label": "Beschriftung", "value": "Wert", "date": "Datum", - "show-date-time-interval": "Datum/Zeit-Intervall anzeigen", - "show-date-time-interval-hint": "Datum/Zeit-Intervall gemäß Datenaggregation anzeigen.", + "show-date-time-interval": "Datums-/Zeitintervall anzeigen", + "show-date-time-interval-hint": "Zeigt das Datums-/Zeitintervall entsprechend der Datenaggregation an.", "hide-zero-tooltip-values": "Nullwerte ausblenden", + "show-stack-total": "Gesamtwert im Stapelmodus anzeigen", "background-color": "Hintergrundfarbe", "background-blur": "Hintergrundunschärfe" }, @@ -6556,10 +6583,10 @@ "no-users-text": "Keine Benutzer gefunden", "user-details": "Benutzerdetails", "delete-user-title": "Möchten Sie den Benutzer '{{userEmail}}' wirklich löschen?", - "delete-user-text": "Vorsicht! Nach der Bestätigung werden der Benutzer und alle zugehörigen Daten unwiederbringlich gelöscht.", - "delete-users-title": "Möchten Sie wirklich { count, plural, =1 {1 Benutzer} other {# Benutzer} } löschen?", + "delete-user-text": "Achtung: Nach der Bestätigung werden der Benutzer und alle zugehörigen Daten unwiederbringlich gelöscht.", + "delete-users-title": "Möchten Sie { count, plural, =1 {1 Benutzer} other {# Benutzer} } wirklich löschen?", "delete-users-action-title": "{ count, plural, =1 {1 Benutzer löschen} other {# Benutzer löschen} }", - "delete-users-text": "Vorsicht! Nach der Bestätigung werden alle ausgewählten Benutzer und zugehörige Daten gelöscht.", + "delete-users-text": "Achtung: Nach der Bestätigung werden alle ausgewählten Benutzer und ihre zugehörigen Daten unwiederbringlich entfernt.", "activation-email-sent-message": "Aktivierungs-E-Mail wurde erfolgreich gesendet!", "resend-activation": "Aktivierung erneut senden", "email": "E-Mail", @@ -6669,24 +6696,24 @@ "remove-all": "Alle entfernen", "version-create-result": "{ added, plural, =0 {Keine Entitäten} =1 {1 Entität} other {# Entitäten} } hinzugefügt.
{ modified, plural, =0 {Keine Entitäten} =1 {1 Entität} other {# Entitäten} } geändert.
{ removed, plural, =0 {Keine Entitäten} =1 {1 Entität} other {# Entitäten} } entfernt.", "remove-other-entities": "Andere Entitäten entfernen", - "find-existing-entity-by-name": "Vorhandene Entität nach Namen finden", + "find-existing-entity-by-name": "Bestehende Entität nach Name suchen", "restore-entities-from-version": "Entitäten aus Version '{{versionName}}' wiederherstellen", "restoring-entities-from-version": "Entitäten werden wiederhergestellt... Bitte warten", - "no-entities-restored": "Keine Entitäten wiederhergestellt", + "no-entities-restored": "Keine Entitäten wurden wiederhergestellt", "created": "{{created}} erstellt", "updated": "{{updated}} aktualisiert", "deleted": "{{deleted}} gelöscht", - "remove-other-entities-confirm-text": "Achtung! Dies wird alle aktuellen Entitäten dauerhaft löschen
die nicht in der wiederherzustellenden Version vorhanden sind.

Bitte geben Sie \"andere Entitäten entfernen\" ein, um zu bestätigen.", - "auto-commit-to-branch": "automatisch in {{ branch }}-Zweig übernehmen", - "default-create-entity-version-name": "{{entityName}} Aktualisierung", - "sync-strategy-merge-hint": "Erstellt oder aktualisiert ausgewählte Entitäten im Repository. Alle anderen Repository-Entitäten werden nicht verändert.", - "sync-strategy-overwrite-hint": "Erstellt oder aktualisiert ausgewählte Entitäten im Repository. Alle anderen Repository-Entitäten werden gelöscht.", - "device-credentials-conflict": "Gerät mit externer ID {{entityId}} konnte nicht geladen werden,
da dieselben Zugangsdaten bereits für ein anderes Gerät vorhanden sind.
Bitte erwägen Sie, die Einstellung Zugangsdaten laden im Wiederherstellungsformular zu deaktivieren.", - "missing-referenced-entity": "{{sourceEntityTypeName}} mit externer ID {{sourceEntityId}} konnte nicht geladen werden,
da sie auf eine fehlende {{targetEntityTypeName}} mit ID {{targetEntityId}} verweist.", + "remove-other-entities-confirm-text": "Achtung! Dies wird alle aktuellen Entitäten dauerhaft löschen,
die nicht in der wiederherzustellenden Version vorhanden sind.

Bitte geben Sie \"remove other entities\" ein, um zu bestätigen.", + "auto-commit-to-branch": "Auto-Commit in den Branch {{branch}}", + "default-create-entity-version-name": "{{entityName}}-Aktualisierung", + "sync-strategy-merge-hint": "Erstellt oder aktualisiert die ausgewählten Entitäten im Repository. Alle anderen Repository-Entitäten werden nicht verändert.", + "sync-strategy-overwrite-hint": "Erstellt oder aktualisiert die ausgewählten Entitäten im Repository. Alle anderen Repository-Entitäten werden gelöscht.", + "device-credentials-conflict": "Laden des Geräts mit externer ID {{entityId}} fehlgeschlagen,
da dieselben Zugangsdaten bereits für ein anderes Gerät in der Datenbank vorhanden sind.
Deaktivieren Sie ggf. die Option Zugangsdaten laden im Wiederherstellungsformular.", + "missing-referenced-entity": "Laden von {{sourceEntityTypeName}} mit externer ID {{sourceEntityId}} fehlgeschlagen,
da die referenzierte {{targetEntityTypeName}} mit ID {{targetEntityId}} fehlt.", "runtime-failed": "Fehlgeschlagen: {{message}}", - "auto-commit-settings-read-only-hint": "Auto-Commit funktioniert nicht, wenn die Option 'Nur-Lesen' in den Repository-Einstellungen aktiviert ist.", - "rollback-on-error": "Bei Fehler zurücksetzen", - "rollback-on-error-hint": "Wenn Sie eine große Menge an Entitäten wiederherstellen, deaktivieren Sie diese Option zur Leistungssteigerung.\nBeachten Sie, dass bei einem Fehler bereits gespeicherte Entitäten (mit Beziehungen, Attributen etc.) erhalten bleiben." + "auto-commit-settings-read-only-hint": "Die Auto-Commit-Funktion funktioniert nicht, wenn die Option 'Nur Lesen' in den Repository-Einstellungen aktiviert ist.", + "rollback-on-error": "Rollback bei Fehlern", + "rollback-on-error-hint": "Wenn Sie eine große Anzahl von Entitäten wiederherstellen, sollten Sie diese Option zur Leistungsverbesserung deaktivieren.\nHinweis: Im Fehlerfall bleiben bereits gespeicherte Entitäten (mit Beziehungen, Attributen usw.) erhalten." }, "widget": { "widget-library": "Widget-Bibliothek", @@ -6703,8 +6730,8 @@ "management": "Widget-Verwaltung", "editor": "Widget-Editor", "confirm-to-exit-editor-html": "Sie haben nicht gespeicherte Widget-Einstellungen.
Möchten Sie diese Seite wirklich verlassen?", - "widget-type-not-found": "Fehler beim Laden der Widget-Konfiguration.
Vermutlich wurde der zugehörige Widget-Typ entfernt.", - "widget-type-load-error": "Widget konnte aufgrund folgender Fehler nicht geladen werden:", + "widget-type-not-found": "Fehler beim Laden der Widget-Konfiguration.
Der zugehörige\n Widget-Typ wurde möglicherweise entfernt.", + "widget-type-load-error": "Widget konnte aufgrund der folgenden Fehler nicht geladen werden:", "remove": "Widget entfernen", "delete": "Widget löschen", "edit": "Widget bearbeiten", @@ -6769,11 +6796,11 @@ "javascript": "JavaScript", "js": "JS", "delete-widget-title": "Möchten Sie das Widget '{{widgetName}}' wirklich löschen?", - "delete-widget-text": "Nach der Bestätigung wird das Widget und alle zugehörigen Daten unwiederbringlich gelöscht.", - "delete-widgets-title": "Möchten Sie wirklich { count, plural, =1 {1 Widget} other {# Widgets} } löschen?", - "delete-widgets-text": "Nach der Bestätigung werden alle ausgewählten Widgets und alle zugehörigen Daten gelöscht.", + "delete-widget-text": "Nach der Bestätigung wird das Widget und alle zugehörigen Daten unwiderruflich gelöscht.", + "delete-widgets-title": "Möchten Sie { count, plural, =1 {1 Widget} other {# Widgets} } wirklich löschen?", + "delete-widgets-text": "Achtung: Nach der Bestätigung werden alle ausgewählten Widgets und deren zugehörige Daten unwiderruflich entfernt.", "delete-widget": "Widget löschen", - "widget-template-load-failed-error": "Widget-Vorlage konnte nicht geladen werden!", + "widget-template-load-failed-error": "Laden der Widget-Vorlage fehlgeschlagen!", "details": "Details", "widget-details": "Widget-Details", "add": "Widget hinzufügen", @@ -8572,15 +8599,15 @@ "fit-map-bounds": "Kartenausschnitt anpassen, um alle Marker abzudecken", "use-default-map-center-position": "Standard-Zentrum der Karte verwenden", "entities-limit": "Grenze für zu ladende Entitäten", - "markers-settings": "Marker-Einstellungen", - "marker-offset-x": "X-Versatz des Markers multipliziert mit Breite", - "marker-offset-y": "Y-Versatz des Markers multipliziert mit Höhe", - "position-function": "Positionsumrechnungsfunktion, sollte x,y-Koordinaten als Double (0-1) zurückgeben", - "draggable-marker": "Marker verschiebbar", + "markers-settings": "Markereinstellungen", + "marker-offset-x": "Marker-X-Versatz relativ zur Position multipliziert mit der Markerbreite", + "marker-offset-y": "Marker-Y-Versatz relativ zur Position multipliziert mit der Markerhöhe", + "position-function": "Positionskonvertierungsfunktion, sollte x,y-Koordinaten im Bereich von 0 bis 1 (double) zurückgeben", + "draggable-marker": "Verschiebbarer Marker", "label": "Beschriftung", "show-label": "Beschriftung anzeigen", "use-label-function": "Beschriftungsfunktion verwenden", - "label-pattern": "Beschriftung (z.B.: '${entityName}', '${entityName}: (Text ${keyName} Einheiten.)')", + "label-pattern": "Beschriftung (Beispielmuster: '${entityName}', '${entityName}: (Text ${keyName} Einheiten.)')", "label-function": "Beschriftungsfunktion", "tooltip": "Tooltip", "show-tooltip": "Tooltip anzeigen", @@ -9522,4 +9549,4 @@ "language": { "language": "Sprache" } -} +} \ No newline at end of file diff --git a/ui-ngx/src/assets/locale/locale.constant-el_GR.json b/ui-ngx/src/assets/locale/locale.constant-el_GR.json index 4af644ab8d..9c2a7edc23 100644 --- a/ui-ngx/src/assets/locale/locale.constant-el_GR.json +++ b/ui-ngx/src/assets/locale/locale.constant-el_GR.json @@ -864,7 +864,7 @@ "api-features": "Λειτουργίες API", "api-usage": "Χρήση API", "alarm": "Συναγερμός", - "alarms-created": "Δημιουργήθηκαν συναγερμοί", + "alarms-created": "Συναγερμοί που δημιουργήθηκαν", "queue-stats": "Στατιστικά ουράς", "processing-failures-and-timeouts": "Αποτυχίες επεξεργασίας και χρονικά όρια", "exceptions": "Εξαιρέσεις", @@ -873,11 +873,11 @@ "alarms-created-monthly-activity": "Μηνιαία δραστηριότητα δημιουργίας συναγερμών", "data-points": "Σημεία δεδομένων", "data-points-storage-days": "Ημέρες αποθήκευσης σημείων δεδομένων", - "device-api": "API συσκευής", + "device-api": "API Συσκευής", "email": "Email", - "email-messages": "Μηνύματα Email", - "email-messages-daily-activity": "Ημερήσια δραστηριότητα Email", - "email-messages-monthly-activity": "Μηνιαία δραστηριότητα Email", + "email-messages": "Μηνύματα email", + "email-messages-daily-activity": "Ημερήσια δραστηριότητα μηνυμάτων email", + "email-messages-monthly-activity": "Μηνιαία δραστηριότητα μηνυμάτων email", "executions": "Εκτελέσεις", "scripts": "Σενάρια", "scripts-hourly-activity": "Ωριαία δραστηριότητα σεναρίων", @@ -1111,13 +1111,15 @@ "mistral-ai": "Mistral AI", "anthropic": "Anthropic", "amazon-bedrock": "Amazon Bedrock", - "github-models": "GitHub Models" + "github-models": "GitHub Models", + "ollama": "Ollama" }, - "name-required": "Απαιτείται όνομα.", - "name-max-length": "Το όνομα πρέπει να έχει έως 255 χαρακτήρες.", + "name-required": "Το όνομα είναι υποχρεωτικό.", + "name-max-length": "Το όνομα πρέπει να είναι έως 255 χαρακτήρες.", "provider": "Πάροχος", "api-key": "Κλειδί API", - "api-key-required": "Απαιτείται κλειδί API.", + "api-key-required": "Το κλειδί API είναι υποχρεωτικό.", + "api-key-open-ai-required": "Το κλειδί API είναι υποχρεωτικό όταν χρησιμοποιείται το επίσημο API του OpenAI.", "project-id": "Αναγνωριστικό έργου", "project-id-required": "Απαιτείται αναγνωριστικό έργου.", "location": "Τοποθεσία", @@ -1141,30 +1143,47 @@ "secret-access-key": "Μυστικό κλειδί πρόσβασης", "secret-access-key-required": "Απαιτείται μυστικό κλειδί πρόσβασης.", "temperature": "Θερμοκρασία", - "temperature-hint": "Ρυθμίζει το επίπεδο τυχαιότητας στην έξοδο του μοντέλου. Υψηλότερες τιμές αυξάνουν την τυχαιότητα, ενώ χαμηλότερες τη μειώνουν.", + "temperature-hint": "Ρυθμίζει το επίπεδο τυχαιότητας στην έξοδο του μοντέλου. Υψηλότερες τιμές αυξάνουν την τυχαιότητα, ενώ χαμηλότερες την μειώνουν.", "temperature-min": "Πρέπει να είναι 0 ή μεγαλύτερο.", "top-p": "Top P", - "top-p-hint": "Δημιουργεί μια ομάδα με τα πιο πιθανά tokens από τα οποία θα επιλέξει το μοντέλο. Υψηλότερες τιμές δημιουργούν μεγαλύτερη και πιο ποικίλη ομάδα.", + "top-p-hint": "Δημιουργεί μια ομάδα από τα πιο πιθανά tokens για επιλογή από το μοντέλο. Υψηλότερες τιμές δημιουργούν μεγαλύτερη και πιο ποικιλόμορφη ομάδα, ενώ χαμηλότερες δημιουργούν μικρότερη.", "top-p-min-max": "Πρέπει να είναι μεγαλύτερο από 0 και έως 1.", "top-k": "Top K", - "top-k-hint": "Περιορίζει τις επιλογές του μοντέλου σε ένα καθορισμένο σύνολο με τα \"K\" πιο πιθανά tokens.", + "top-k-hint": "Περιορίζει τις επιλογές του μοντέλου σε ένα καθορισμένο σύνολο από τα \"K\" πιο πιθανά tokens.", "top-k-min": "Πρέπει να είναι 0 ή μεγαλύτερο.", "presence-penalty": "Ποινή παρουσίας", - "presence-penalty-hint": "Εφαρμόζει σταθερή ποινή στην πιθανότητα ενός token αν έχει ήδη εμφανιστεί στο κείμενο.", + "presence-penalty-hint": "Εφαρμόζει μια σταθερή ποινή στην πιθανότητα ενός token εάν έχει ήδη εμφανιστεί στο κείμενο.", "frequency-penalty": "Ποινή συχνότητας", - "frequency-penalty-hint": "Εφαρμόζει ποινή στην πιθανότητα ενός token που αυξάνεται με βάση τη συχνότητα εμφάνισής του στο κείμενο.", + "frequency-penalty-hint": "Εφαρμόζει ποινή στην πιθανότητα ενός token, που αυξάνεται βάσει της συχνότητάς του στο κείμενο.", "max-output-tokens": "Μέγιστος αριθμός tokens εξόδου", - "max-output-tokens-min": "Πρέπει να είναι μεγαλύτερο από 0.", - "max-output-tokens-hint": "Ορίζει τον μέγιστο αριθμό tokens που μπορεί να δημιουργήσει το μοντέλο σε μία απάντηση.", - "endpoint": "Σημείο τερματισμού (Endpoint)", - "endpoint-required": "Απαιτείται σημείο τερματισμού.", + "max-output-tokens-hint": "Καθορίζει τον μέγιστο αριθμό tokens που μπορεί να παράγει το μοντέλο σε μία απάντηση.", + "context-length": "Μήκος συμφραζομένων", + "context-length-hint": "Καθορίζει το μέγεθος του παραθύρου συμφραζομένων σε tokens. Αυτή η τιμή ορίζει το συνολικό όριο μνήμης του μοντέλου, περιλαμβάνοντας τόσο την είσοδο του χρήστη όσο και την παραγόμενη απάντηση.", + "endpoint": "Σημείο τέλους", + "endpoint-required": "Το σημείο τέλους είναι υποχρεωτικό.", + "baseurl": "Βασικό URL", + "baseurl-required": "Το βασικό URL είναι υποχρεωτικό.", "service-version": "Έκδοση υπηρεσίας", "check-connectivity": "Έλεγχος συνδεσιμότητας", "check-connectivity-success": "Το δοκιμαστικό αίτημα ήταν επιτυχές", "check-connectivity-failed": "Το δοκιμαστικό αίτημα απέτυχε", "no-model-matching": "Δεν βρέθηκαν μοντέλα που να ταιριάζουν με '{{entity}}'.", "model-required": "Απαιτείται μοντέλο.", - "no-model-text": "Δεν βρέθηκαν μοντέλα." + "no-model-text": "Δεν βρέθηκαν μοντέλα.", + "authentication": "Αυθεντικοποίηση", + "authentication-basic-hint": "Χρησιμοποιεί την τυπική HTTP Basic αυθεντικοποίηση. Το όνομα χρήστη και ο κωδικός πρόσβασης θα συνδυαστούν, θα κωδικοποιηθούν σε Base64 και θα σταλούν στην κεφαλίδα \"Authorization\" με κάθε αίτημα προς τον διακομιστή Ollama.", + "authentication-token-hint": "Χρησιμοποιεί αυθεντικοποίηση με διακριτικό τύπου Bearer. Το παρεχόμενο διακριτικό θα σταλεί απευθείας στην κεφαλίδα \"Authorization\" με κάθε αίτημα προς τον διακομιστή Ollama.", + "authentication-type": { + "none": "Καμία", + "basic": "Basic", + "token": "Token" + }, + "username": "Όνομα χρήστη", + "username-required": "Το όνομα χρήστη είναι υποχρεωτικό.", + "password": "Κωδικός πρόσβασης", + "password-required": "Ο κωδικός πρόσβασης είναι υποχρεωτικός.", + "token": "Διακριτικό", + "token-required": "Το διακριτικό είναι υποχρεωτικό." }, "confirm-on-exit": { "message": "Έχετε μη αποθηκευμένες αλλαγές. Είστε βέβαιοι ότι θέλετε να φύγετε από αυτήν τη σελίδα;", @@ -1434,9 +1453,9 @@ "min-mobile-row-height-message": "Ελάχιστο ύψος γραμμής για κινητό είναι 5 pixels.", "max-mobile-row-height-message": "Μέγιστο ύψος γραμμής για κινητό είναι 200 pixels.", "row-height": "Ύψος γραμμής", - "row-height-required": "Απαιτείται τιμή ύψους γραμμής.", - "min-row-height-message": "Ελάχιστο ύψος γραμμής είναι 5 pixels.", - "max-row-height-message": "Μέγιστο ύψος γραμμής είναι 200 pixels.", + "row-height-required": "Η τιμή ύψους γραμμής είναι υποχρεωτική.", + "min-row-height-message": "Επιτρέπονται μόνο 5 pixel ως ελάχιστο ύψος γραμμής.", + "max-row-height-message": "Επιτρέπονται μόνο 200 pixel ως μέγιστο ύψος γραμμής.", "display-first-in-mobile-view": "Εμφάνιση πρώτα στην προβολή κινητού", "title-settings": "Ρυθμίσεις τίτλου", "display-title": "Εμφάνιση τίτλου πίνακα", @@ -1587,7 +1606,7 @@ "aggregation-type-count-hint": "Συνολικός αριθμός σημείων δεδομένων σε επιλεγμένο χρονικό παράθυρο.", "delta-calculation": "Υπολογισμός διαφοράς", "enable-delta-calculation": "Ενεργοποίηση υπολογισμού διαφοράς", - "enable-delta-calculation-hint": "Όταν είναι ενεργοποιημένο, η τιμή του κλειδιού δεδομένων υπολογίζεται με βάση τις συσσωρευμένες τιμές για ένα επιλεγμένο χρονικό παράθυρο και μια καθορισμένη περίοδο σύγκρισης. Για λόγους απόδοσης, ο υπολογισμός διαφοράς είναι διαθέσιμος μόνο για ιστορικά χρονικά παράθυρα και όχι για τιμές σε πραγματικό χρόνο.", + "enable-delta-calculation-hint": "Όταν είναι ενεργοποιημένο, η τιμή του δεδομένου υπολογίζεται βάσει των συγκεντρωτικών τιμών για ένα επιλεγμένο χρονικό παράθυρο και μια καθορισμένη περίοδο σύγκρισης. Για λόγους απόδοσης, ο υπολογισμός της διαφοράς είναι διαθέσιμος μόνο για χρονικά παράθυρα ιστορικού και όχι για τιμές σε πραγματικό χρόνο. Για παράδειγμα, μπορείτε να υπολογίσετε τη διαφορά στην κατανάλωση ενέργειας μεταξύ χθες και προχθές.", "delta-calculation-result": "Αποτέλεσμα υπολογισμού διαφοράς", "delta-calculation-result-previous-value": "Προηγούμενη τιμή", "delta-calculation-result-delta-absolute": "Διαφορά (απόλυτη)", @@ -1916,24 +1935,24 @@ "default": "Προεπιλογή", "default-rule-chain": "Προεπιλεγμένη αλυσίδα κανόνων", "default-edge-rule-chain": "Προεπιλεγμένη αλυσίδα κανόνων Edge", - "default-edge-rule-chain-hint": "Χρησιμοποιείται στο Edge ως αλυσίδα κανόνων για την επεξεργασία εισερχόμενων δεδομένων για περιουσιακά στοιχεία αυτού του προφίλ", - "mobile-dashboard": "Πίνακας ελέγχου για κινητό", - "mobile-dashboard-hint": "Χρησιμοποιείται από την εφαρμογή για κινητό ως πίνακας λεπτομερειών περιουσιακού στοιχείου", - "select-queue-hint": "Επιλέξτε από αναπτυσσόμενη λίστα.", - "delete-asset-profile-title": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το προφίλ περιουσιακού στοιχείου '{{assetProfileName}}';", - "delete-asset-profile-text": "Προσοχή, μετά την επιβεβαίωση το προφίλ και όλα τα σχετικά δεδομένα δεν θα είναι ανακτήσιμα.", - "delete-asset-profiles-title": "Είστε βέβαιοι ότι θέλετε να διαγράψετε { count, plural, =1 {1 προφίλ περιουσιακού στοιχείου} other {# προφίλ περιουσιακών στοιχείων} };", - "delete-asset-profiles-text": "Προσοχή, μετά την επιβεβαίωση όλα τα επιλεγμένα προφίλ θα διαγραφούν και όλα τα σχετικά δεδομένα δεν θα είναι ανακτήσιμα.", - "set-default-asset-profile-title": "Είστε βέβαιοι ότι θέλετε να ορίσετε το προφίλ '{{assetProfileName}}' ως προεπιλεγμένο;", - "set-default-asset-profile-text": "Μετά την επιβεβαίωση, το προφίλ θα οριστεί ως προεπιλογή και θα χρησιμοποιείται για νέα περιουσιακά στοιχεία χωρίς καθορισμένο προφίλ.", - "no-asset-profiles-found": "Δεν βρέθηκαν προφίλ περιουσιακών στοιχείων.", - "create-new-asset-profile": "Δημιουργία νέου!", - "create-asset-profile": "Δημιουργία νέου προφίλ περιουσιακού στοιχείου", - "import": "Εισαγωγή προφίλ περιουσιακού στοιχείου", - "export": "Εξαγωγή προφίλ περιουσιακού στοιχείου", - "export-failed-error": "Αδυναμία εξαγωγής προφίλ: {{error}}", - "asset-profile-file": "Αρχείο προφίλ περιουσιακού στοιχείου", - "invalid-asset-profile-file-error": "Αδυναμία εισαγωγής προφίλ: Μη έγκυρη δομή δεδομένων προφίλ περιουσιακού στοιχείου." + "default-edge-rule-chain-hint": "Χρησιμοποιείται στο Edge ως αλυσίδα κανόνων για την επεξεργασία εισερχόμενων δεδομένων για στοιχεία αυτού του προφίλ πόρου", + "mobile-dashboard": "Πίνακας ελέγχου κινητού", + "mobile-dashboard-hint": "Χρησιμοποιείται από την εφαρμογή κινητού ως πίνακας λεπτομερειών πόρου", + "select-queue-hint": "Επιλέξτε από την αναπτυσσόμενη λίστα.", + "delete-asset-profile-title": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το προφίλ πόρου '{{assetProfileName}}';", + "delete-asset-profile-text": "Προσοχή, μετά την επιβεβαίωση το προφίλ πόρου και όλα τα σχετικά δεδομένα δεν θα είναι ανακτήσιμα.", + "delete-asset-profiles-title": "Είστε βέβαιοι ότι θέλετε να διαγράψετε { count, plural, =1 {1 προφίλ πόρου} other {# προφίλ πόρων} };", + "delete-asset-profiles-text": "Προσοχή, μετά την επιβεβαίωση όλα τα επιλεγμένα προφίλ πόρων θα διαγραφούν και όλα τα σχετικά δεδομένα δεν θα είναι ανακτήσιμα.", + "set-default-asset-profile-title": "Είστε βέβαιοι ότι θέλετε να ορίσετε το προφίλ πόρου '{{assetProfileName}}' ως προεπιλεγμένο;", + "set-default-asset-profile-text": "Μετά την επιβεβαίωση, το προφίλ πόρου θα οριστεί ως προεπιλεγμένο και θα χρησιμοποιείται για νέους πόρους χωρίς καθορισμένο προφίλ.", + "no-asset-profiles-found": "Δεν βρέθηκαν προφίλ πόρων.", + "create-new-asset-profile": "Δημιουργήστε ένα νέο!", + "create-asset-profile": "Δημιουργία νέου προφίλ πόρου", + "import": "Εισαγωγή προφίλ πόρου", + "export": "Εξαγωγή προφίλ πόρου", + "export-failed-error": "Αδυναμία εξαγωγής προφίλ πόρου: {{error}}", + "asset-profile-file": "Αρχείο προφίλ πόρου", + "invalid-asset-profile-file-error": "Αδυναμία εισαγωγής προφίλ πόρου: Μη έγκυρη δομή δεδομένων προφίλ πόρου." }, "device-profile": { "device-profile": "Προφίλ συσκευής", @@ -1998,17 +2017,17 @@ "mqtt-device-payload-type": "Payload συσκευής MQTT", "mqtt-device-payload-type-json": "JSON", "mqtt-device-payload-type-proto": "Protobuf", - "mqtt-enable-compatibility-with-json-payload-format": "Ενεργοποίηση συμβατότητας με άλλες μορφές payload", - "mqtt-enable-compatibility-with-json-payload-format-hint": "Όταν είναι ενεργοποιημένο, χρησιμοποιείται Protobuf ως προεπιλογή και γίνεται fallback σε JSON αν αποτύχει η ανάλυση. Χρήσιμο για υποστήριξη συσκευών κατά τη διάρκεια αναβάθμισης firmware.", - "mqtt-use-json-format-for-default-downlink-topics": "Χρήση μορφής JSON για τα προεπιλεγμένα θέματα downlink", - "mqtt-use-json-format-for-default-downlink-topics-hint": "Όταν ενεργοποιηθεί, χρησιμοποιείται JSON payload για αποστολή attributes και RPC μέσω θεμάτων v1/devices/me/attributes/response/$request_id, v1/devices/me/attributes, v1/devices/me/rpc/request/$request_id, v1/devices/me/rpc/response/$request_id. Δεν επηρεάζει νέα θέματα (v2): v2/a/res/$request_id κ.λπ.", - "mqtt-send-ack-on-validation-exception": "Αποστολή PUBACK σε αποτυχία επικύρωσης PUBLISH μηνύματος", - "mqtt-send-ack-on-validation-exception-hint": "Αντί για τερματισμό της συνεδρίας, η πλατφόρμα θα στείλει PUBACK αν είναι ενεργοποιημένο.", + "mqtt-enable-compatibility-with-json-payload-format": "Ενεργοποίηση συμβατότητας με άλλες μορφές φορτίου.", + "mqtt-enable-compatibility-with-json-payload-format-hint": "Όταν είναι ενεργοποιημένο, η πλατφόρμα θα χρησιμοποιεί από προεπιλογή μορφή φορτίου Protobuf. Αν αποτύχει η ανάλυση, η πλατφόρμα θα προσπαθήσει να χρησιμοποιήσει μορφή φορτίου JSON. Χρήσιμο για συμβατότητα με προηγούμενες εκδόσεις κατά τις ενημερώσεις firmware. Για παράδειγμα, η αρχική έκδοση του firmware χρησιμοποιεί Json, ενώ η νέα χρησιμοποιεί Protobuf. Κατά τη διαδικασία ενημέρωσης firmware για τον στόλο των συσκευών, απαιτείται υποστήριξη τόσο Protobuf όσο και JSON ταυτόχρονα. Η λειτουργία συμβατότητας επιφέρει ελαφρά μείωση της απόδοσης, οπότε συνιστάται η απενεργοποίησή της μόλις ενημερωθούν όλες οι συσκευές.", + "mqtt-use-json-format-for-default-downlink-topics": "Χρήση μορφής Json για τα προεπιλεγμένα θέματα downlink", + "mqtt-use-json-format-for-default-downlink-topics-hint": "Όταν είναι ενεργοποιημένο, η πλατφόρμα θα χρησιμοποιεί μορφή φορτίου Json για αποστολή χαρακτηριστικών και RPC μέσω των ακόλουθων θεμάτων: v1/devices/me/attributes/response/$request_id, v1/devices/me/attributes, v1/devices/me/rpc/request/$request_id, v1/devices/me/rpc/response/$request_id. Αυτή η ρύθμιση δεν επηρεάζει τις εγγραφές χαρακτηριστικών και RPC που αποστέλλονται χρησιμοποιώντας τα νέα θέματα (v2): v2/a/res/$request_id, v2/a, v2/r/req/$request_id, v2/r/res/$request_id. Όπου το $request_id είναι ένας ακέραιος αναγνωριστικός αριθμός αιτήματος.", + "mqtt-send-ack-on-validation-exception": "Αποστολή PUBACK σε αποτυχία επικύρωσης μηνύματος PUBLISH", + "mqtt-send-ack-on-validation-exception-hint": "Από προεπιλογή, η πλατφόρμα θα τερματίζει τη συνεδρία MQTT σε περίπτωση αποτυχίας επικύρωσης μηνύματος. Όταν είναι ενεργοποιημένο, η πλατφόρμα θα στέλνει επιβεβαίωση δημοσίευσης αντί να τερματίζει τη συνεδρία.", "mqtt-protocol-version": "Έκδοση πρωτοκόλλου", - "snmp-add-mapping": "Προσθήκη SNMP αντιστοίχισης", - "snmp-mapping-not-configured": "Δεν έχει διαμορφωθεί αντιστοίχιση OID σε χρονική σειρά/χαρακτηριστικό", - "snmp-timseries-or-attribute-name": "Όνομα για αντιστοίχιση χρονικής σειράς/χαρακτηριστικού", - "snmp-timseries-or-attribute-type": "Τύπος για αντιστοίχιση χρονικής σειράς/χαρακτηριστικού", + "snmp-add-mapping": "Προσθήκη αντιστοίχισης SNMP", + "snmp-mapping-not-configured": "Δεν έχει διαμορφωθεί αντιστοίχιση από OID σε χρονοσειρά/τηλεμετρία", + "snmp-timseries-or-attribute-name": "Όνομα χρονοσειράς/χαρακτηριστικού για αντιστοίχιση", + "snmp-timseries-or-attribute-type": "Τύπος χρονοσειράς/χαρακτηριστικού για αντιστοίχιση", "snmp-method-pdu-type-get-request": "GetRequest", "snmp-method-pdu-type-get-next-request": "GetNextRequest", "snmp-oid": "OID", @@ -2209,20 +2228,20 @@ "bootstrap-server-legend": "Bootstrap διακομιστής (ShortId...)", "lwm2m-server-legend": "LwM2M διακομιστής (ShortId...)", "server": "Διακομιστής", - "short-id": "Σύντομο ID διακομιστή", - "short-id-tooltip": "Σύντομο Id διακομιστή. Χρησιμοποιείται για σύνδεση με στιγμιότυπο αντικειμένου.\nΠρέπει να οριστεί όταν το πεδίο Bootstrap-Server έχει τιμή 'false'.\nΔεν επιτρέπεται η χρήση των ID:0 και ID:65535.", - "short-id-tooltip-bootstrap": "Χρησιμοποιείται για σύνδεση με στιγμιότυπο αντικειμένου διακομιστή.\nΠρέπει να οριστεί όταν το πεδίο Bootstrap-Server έχει τιμή 'false'.", - "short-id-required": "Απαιτείται σύντομο ID διακομιστή.", - "short-id-range": "Το σύντομο ID διακομιστή πρέπει να είναι μεταξύ {{ min }} και {{ max }}.", - "short-id-pattern": "Το σύντομο ID διακομιστή πρέπει να είναι θετικός ακέραιος.", + "short-id": "Σύντομο αναγνωριστικό διακομιστή", + "short-id-tooltip": "Σύντομο αναγνωριστικό διακομιστή. Χρησιμοποιείται ως σύνδεσμος για τη συσχέτιση του αντικειμένου διακομιστή.\nΑυτό το αναγνωριστικό προσδιορίζει μοναδικά κάθε διακομιστή LwM2M που έχει διαμορφωθεί για τον πελάτη LwM2M.\nΟ πόρος ΠΡΕΠΕΙ να οριστεί όταν ο πόρος Bootstrap-Server έχει τιμή 'false'.\nΟι τιμές ID:0 και ID:65535 ΔΕΝ ΠΡΕΠΕΙ να χρησιμοποιούνται για την αναγνώριση του διακομιστή LwM2M.", + "short-id-tooltip-bootstrap": "Σύντομο αναγνωριστικό διακομιστή. Χρησιμοποιείται ως σύνδεσμος για τη συσχέτιση του αντικειμένου διακομιστή.\nΑυτό το αναγνωριστικό προσδιορίζει μοναδικά κάθε διακομιστή LwM2M που έχει διαμορφωθεί για τον πελάτη LwM2M.\nΟ πόρος ΠΡΕΠΕΙ να οριστεί όταν ο πόρος Bootstrap-Server έχει τιμή 'false'.", + "short-id-required": "Το σύντομο αναγνωριστικό διακομιστή είναι υποχρεωτικό.", + "short-id-range": "Το σύντομο αναγνωριστικό διακομιστή πρέπει να είναι εντός του εύρους από {{ min }} έως {{ max }}.", + "short-id-pattern": "Το σύντομο αναγνωριστικό διακομιστή πρέπει να είναι θετικός ακέραιος αριθμός.", "lifetime": "Διάρκεια εγγραφής πελάτη", - "lifetime-required": "Απαιτείται διάρκεια εγγραφής πελάτη.", - "lifetime-pattern": "Η διάρκεια πρέπει να είναι θετικός ακέραιος.", - "default-min-period": "Ελάχιστη περίοδος μεταξύ ειδοποιήσεων (δ)", - "default-min-period-tooltip": "Χρησιμοποιείται αν δεν περιλαμβάνεται η παράμετρος στην παρατήρηση.", - "default-min-period-required": "Απαιτείται ελάχιστη περίοδος.", - "default-min-period-pattern": "Η ελάχιστη περίοδος πρέπει να είναι θετικός ακέραιος.", - "notification-storing": "Αποθήκευση ειδοποιήσεων όταν είναι απενεργοποιημένο ή εκτός σύνδεσης", + "lifetime-required": "Η διάρκεια εγγραφής πελάτη είναι υποχρεωτική.", + "lifetime-pattern": "Η διάρκεια εγγραφής πελάτη πρέπει να είναι θετικός ακέραιος αριθμός.", + "default-min-period": "Ελάχιστη περίοδος μεταξύ δύο ειδοποιήσεων (δλ)", + "default-min-period-tooltip": "Η προεπιλεγμένη τιμή που πρέπει να χρησιμοποιεί ο πελάτης LwM2M για την Ελάχιστη Περίοδο μιας Παρατήρησης όταν αυτή η παράμετρος δεν περιλαμβάνεται.", + "default-min-period-required": "Η ελάχιστη περίοδος είναι υποχρεωτική.", + "default-min-period-pattern": "Η ελάχιστη περίοδος πρέπει να είναι θετικός ακέραιος αριθμός.", + "notification-storing": "Αποθήκευση ειδοποιήσεων όταν είναι απενεργοποιημένος ή εκτός σύνδεσης", "binding": "Δεσμευτικό", "binding-type": { "u": "U: Ο πελάτης είναι προσβάσιμος μέσω UDP ανά πάσα στιγμή.", @@ -4304,11 +4323,11 @@ "profile": { "profile": "Προφίλ", "last-login-time": "Τελευταία σύνδεση", - "change-password": "Αλλαγή κωδικού", - "current-password": "Τρέχων κωδικός", + "change-password": "Αλλαγή κωδικού πρόσβασης", + "current-password": "Τρέχων κωδικός πρόσβασης", "copy-jwt-token": "Αντιγραφή JWT token", "jwt-token": "JWT token", - "token-valid-till": "Το token είναι έγκυρο έως", + "token-valid-till": "Το token ισχύει μέχρι", "tokenCopiedSuccessMessage": "Το JWT token αντιγράφηκε στο πρόχειρο", "tokenCopiedWarnMessage": "Το JWT token έχει λήξει! Παρακαλώ, ανανεώστε τη σελίδα." }, @@ -4366,17 +4385,17 @@ }, "provider": { "email": "Email", - "email-description": "Χρησιμοποιήστε κωδικό που αποστέλλεται στο email σας.", - "email-hint": "Οι κωδικοί αποστέλλονται στο {{ info }}", + "email-description": "Χρησιμοποιήστε έναν κωδικό ασφαλείας που αποστέλλεται στη διεύθυνση email σας για να πραγματοποιήσετε έλεγχο ταυτότητας.", + "email-hint": "Οι κωδικοί ελέγχου ταυτότητας αποστέλλονται μέσω email στη διεύθυνση {{ info }}", "sms": "SMS", - "sms-description": "Χρησιμοποιήστε το κινητό σας για επαλήθευση. Θα σας αποστείλουμε έναν κωδικό μέσω SMS.", - "sms-hint": "Οι κωδικοί αποστέλλονται στο {{ info }}", - "totp": "Εφαρμογή επαλήθευσης", - "totp-description": "Χρησιμοποιήστε εφαρμογές όπως Google Authenticator, Authy ή Duo για την επαλήθευση.", - "totp-hint": "Η εφαρμογή επαλήθευσης έχει ρυθμιστεί για τον λογαριασμό σας", + "sms-description": "Χρησιμοποιήστε το τηλέφωνό σας για έλεγχο ταυτότητας. Θα σας στείλουμε έναν κωδικό ασφαλείας μέσω SMS όταν συνδεθείτε.", + "sms-hint": "Οι κωδικοί ελέγχου ταυτότητας αποστέλλονται με μήνυμα κειμένου στον αριθμό {{ info }}", + "totp": "Εφαρμογή ελέγχου ταυτότητας", + "totp-description": "Χρησιμοποιήστε εφαρμογές όπως Google Authenticator, Authy ή Duo στο τηλέφωνό σας για έλεγχο ταυτότητας. Θα δημιουργήσει έναν κωδικό ασφαλείας για σύνδεση.", + "totp-hint": "Η εφαρμογή ελέγχου ταυτότητας έχει ρυθμιστεί για τον λογαριασμό σας", "backup_code": "Εφεδρικός κωδικός", - "backup-code-description": "Οι εφεδρικοί κωδικοί επιτρέπουν σύνδεση όταν δεν έχετε πρόσβαση στο κινητό σας.", - "backup-code-hint": "{{ info }} μονο-χρησιμοποιούμενοι κωδικοί είναι ενεργοί αυτή τη στιγμή" + "backup-code-description": "Αυτοί οι εκτυπώσιμοι κωδικοί μίας χρήσης σάς επιτρέπουν να συνδεθείτε όταν δεν έχετε πρόσβαση στο τηλέφωνό σας, όπως κατά τη διάρκεια ενός ταξιδιού.", + "backup-code-hint": "{{ info }} κωδικοί μιας χρήσης είναι ενεργοί αυτήν τη στιγμή" } }, "password-requirement": { @@ -4478,15 +4497,21 @@ "jks": "JKS", "js-module": "JS module", "lwm2m-model": "Μοντέλο LWM2M", - "pkcs-12": "PKCS #12" + "pkcs-12": "PKCS #12", + "general": "Γενικά" }, "resource-sub-type": "Υποτύπος", "sub-type": { - "image": "εικόνα", + "image": "Εικόνα", "scada-symbol": "Σύμβολο SCADA", "extension": "Επέκταση", - "module": "Μονάδα" - } + "module": "Άρθρωμα" + }, + "resource-is-in-use": "Ο πόρος χρησιμοποιείται από άλλες οντότητες", + "resources-are-in-use": "Οι πόροι χρησιμοποιούνται από άλλες οντότητες", + "resource-is-in-use-text": "Ο πόρος '{{title}}' δεν διαγράφηκε επειδή χρησιμοποιείται από τις παρακάτω οντότητες:", + "resources-are-in-use-text": "Δεν διαγράφηκαν όλοι οι πόροι επειδή χρησιμοποιούνται από άλλες οντότητες.
Μπορείτε να δείτε τις σχετικές οντότητες κάνοντας κλικ στο κουμπί Αναφορές στη σχετική γραμμή πόρου.
Αν εξακολουθείτε να θέλετε να διαγράψετε αυτούς τους πόρους, επιλέξτε τους στον παρακάτω πίνακα και κάντε κλικ στο κουμπί Διαγραφή επιλεγμένων.", + "delete-resource-in-use-text": "Αν εξακολουθείτε να θέλετε να διαγράψετε τον πόρο, κάντε κλικ στο κουμπί Διαγραφή ούτως ή άλλως." }, "javascript": { "add": "Προσθήκη πόρου JavaScript", @@ -4568,23 +4593,23 @@ "edge-template-root": "Ρίζα προτύπου edge", "assign-to-edge": "Ανάθεση σε edge", "edge-rulechain": "Αλυσίδα κανόνων edge", - "unassign-rulechain-from-edge-text": "Μετά την επιβεβαίωση η αλυσίδα κανόνων θα αποανατεθεί και δεν θα είναι προσβάσιμη από το edge.", - "unassign-rulechains-from-edge-title": "Είστε σίγουροι ότι θέλετε να αποαναθέσετε { count, plural, =1 {1 αλυσίδα κανόνων} other {# αλυσίδες κανόνων} };", - "unassign-rulechains-from-edge-text": "Μετά την επιβεβαίωση όλες οι επιλεγμένες αλυσίδες κανόνων θα αποανατεθούν και δεν θα είναι προσβάσιμες από το edge.", - "assign-rulechain-to-edge-title": "Ανάθεση αλυσίδας(ών) κανόνων στο Edge", - "assign-rulechain-to-edge-text": "Επιλέξτε τις αλυσίδες κανόνων που θα ανατεθούν στο edge", - "set-edge-template-root-rulechain": "Ορισμός ως ρίζα προτύπου edge", + "unassign-rulechain-from-edge-text": "Μετά την επιβεβαίωση, η αλυσίδα κανόνων θα αποσυσχετιστεί και δεν θα είναι προσβάσιμη από το edge.", + "unassign-rulechains-from-edge-title": "Είστε σίγουροι ότι θέλετε να αποσυσχετίσετε { count, plural, =1 {1 αλυσίδα κανόνων} other {# αλυσίδες κανόνων} };", + "unassign-rulechains-from-edge-text": "Μετά την επιβεβαίωση, όλες οι επιλεγμένες αλυσίδες κανόνων θα αποσυσχετιστούν και δεν θα είναι προσβάσιμες από το edge.", + "assign-rulechain-to-edge-title": "Ανάθεση Αλυσίδας Κανόνων σε Edge", + "assign-rulechain-to-edge-text": "Παρακαλώ επιλέξτε τις αλυσίδες κανόνων που θα ανατεθούν στο edge", + "set-edge-template-root-rulechain": "Ορισμός αλυσίδας κανόνων ως ρίζα προτύπου edge", "set-edge-template-root-rulechain-title": "Είστε σίγουροι ότι θέλετε να ορίσετε την αλυσίδα κανόνων '{{ruleChainName}}' ως ρίζα προτύπου edge;", - "set-edge-template-root-rulechain-text": "Μετά την επιβεβαίωση, η αλυσίδα κανόνων θα γίνει ρίζα προτύπου edge και θα είναι η βασική αλυσίδα για νέα edge.", - "invalid-rulechain-type-error": "Αδυναμία εισαγωγής: Μη έγκυρος τύπος αλυσίδας κανόνων. Αναμενόμενος τύπος: {{expectedRuleChainType}}.", - "set-auto-assign-to-edge": "Ανάθεση σε edge κατά τη δημιουργία", - "set-auto-assign-to-edge-title": "Είστε σίγουροι ότι θέλετε να αναθέσετε την αλυσίδα '{{ruleChainName}}' σε edge κατά τη δημιουργία;", - "set-auto-assign-to-edge-text": "Μετά την επιβεβαίωση, η αλυσίδα θα ανατίθεται αυτόματα σε νέο edge.", - "unset-auto-assign-to-edge": "Μη αυτόματη ανάθεση σε edge κατά τη δημιουργία", - "unset-auto-assign-to-edge-title": "Είστε σίγουροι ότι δεν θέλετε την αυτόματη ανάθεση της αλυσίδας '{{ruleChainName}}';", - "unset-auto-assign-to-edge-text": "Μετά την επιβεβαίωση η αλυσίδα δεν θα ανατίθεται αυτόματα σε νέο edge.", - "unassign-rulechain-title": "Είστε σίγουροι ότι θέλετε να αποαναθέσετε την αλυσίδα '{{ruleChainName}}';", - "unassign-rulechains": "Αποανάθεση αλυσίδων κανόνων" + "set-edge-template-root-rulechain-text": "Μετά την επιβεβαίωση, η αλυσίδα κανόνων θα γίνει ρίζα προτύπου edge και θα είναι η βασική αλυσίδα για νέα edges.", + "invalid-rulechain-type-error": "Αδυναμία εισαγωγής αλυσίδας κανόνων: Μη έγκυρος τύπος. Αναμενόμενος τύπος: {{expectedRuleChainType}}.", + "set-auto-assign-to-edge": "Ανάθεση αλυσίδας κανόνων σε edge κατά τη δημιουργία", + "set-auto-assign-to-edge-title": "Είστε σίγουροι ότι θέλετε να ανατεθεί η αλυσίδα κανόνων edge '{{ruleChainName}}' σε edge κατά τη δημιουργία;", + "set-auto-assign-to-edge-text": "Μετά την επιβεβαίωση, η αλυσίδα κανόνων edge θα ανατίθεται αυτόματα σε edge κατά τη δημιουργία.", + "unset-auto-assign-to-edge": "Να μην ανατίθεται αλυσίδα κανόνων σε edge κατά τη δημιουργία", + "unset-auto-assign-to-edge-title": "Είστε σίγουροι ότι δεν θέλετε να ανατεθεί η αλυσίδα κανόνων edge '{{ruleChainName}}' σε edge κατά τη δημιουργία;", + "unset-auto-assign-to-edge-text": "Μετά την επιβεβαίωση, η αλυσίδα κανόνων edge δεν θα ανατίθεται πλέον αυτόματα σε edge κατά τη δημιουργία.", + "unassign-rulechain-title": "Είστε σίγουροι ότι θέλετε να αποσυσχετίσετε την αλυσίδα κανόνων '{{ruleChainName}}';", + "unassign-rulechains": "Αποσυσχέτιση αλυσίδων κανόνων" }, "rulenode": { "rule-node-events": "Συμβάντα κόμβου κανόνα", @@ -4692,14 +4717,14 @@ "entity-cache-expiration-range": "Ο χρόνος πρέπει να είναι μεγαλύτερος ή ίσος με 0.", "customer-name-pattern": "Τίτλος πελάτη", "customer-name-pattern-required": "Ο τίτλος πελάτη είναι υποχρεωτικός", - "customer-name-pattern-hint": "Χρησιμοποιήστε $[messageKey] και ${metadataKey} για τιμές από το μήνυμα ή μεταδεδομένα.", + "customer-name-pattern-hint": "Χρησιμοποιήστε $[messageKey] για να εξάγετε τιμή από το μήνυμα και ${metadataKey} για να εξάγετε τιμή από τα μεταδεδομένα.", "create-customer-if-not-exists": "Δημιουργία νέου πελάτη αν δεν υπάρχει", - "unassign-from-customer": "Αποσυσχέτιση από συγκεκριμένο πελάτη αν το αρχικό είναι πίνακας ελέγχου", - "unassign-from-customer-tooltip": "Μόνο πίνακες ελέγχου μπορούν να συσχετιστούν με πολλούς πελάτες. Αν ο αποστολέας είναι πίνακας, καθορίστε τίτλο πελάτη για αποσυσχέτιση.", - "customer-cache-expiration": "Χρόνος λήξης προσωρινής αποθήκευσης πελατών (δευτ)", - "customer-cache-expiration-hint": "Ορίζει το μέγιστο χρονικό διάστημα αποθήκευσης πελατών. 0 σημαίνει χωρίς λήξη.", - "customer-cache-expiration-required": "Απαιτείται χρόνος λήξης προσωρινής αποθήκευσης πελατών.", - "customer-cache-expiration-range": "Ο χρόνος πρέπει να είναι μεγαλύτερος ή ίσος με 0.", + "unassign-from-customer": "Αποσυσχέτιση από συγκεκριμένο πελάτη αν ο αποστολέας είναι πίνακας ελέγχου", + "unassign-from-customer-tooltip": "Μόνο οι πίνακες ελέγχου μπορούν να ανατεθούν σε πολλούς πελάτες ταυτόχρονα. \nΑν ο αποστολέας του μηνύματος είναι πίνακας ελέγχου, πρέπει να προσδιορίσετε ρητά τον τίτλο του πελάτη για αποσυσχέτιση.", + "customer-cache-expiration": "Χρόνος λήξης προσωρινής μνήμης πελατών (δευτ.)", + "customer-cache-expiration-hint": "Καθορίζει το μέγιστο χρονικό διάστημα αποθήκευσης των καταγεγραμμένων πελατών. Τιμή 0 σημαίνει ότι οι καταγραφές δεν λήγουν ποτέ.", + "customer-cache-expiration-required": "Απαιτείται χρόνος λήξης προσωρινής μνήμης πελατών.", + "customer-cache-expiration-range": "Ο χρόνος λήξης προσωρινής μνήμης πελατών πρέπει να είναι μεγαλύτερος ή ίσος με 0.", "interval-start": "Έναρξη διαστήματος", "interval-end": "Τέλος διαστήματος", "time-unit": "Μονάδα χρόνου", @@ -4719,10 +4744,10 @@ "end-interval-value-required": "Απαιτείται το τέλος διαστήματος.", "filter": "Φίλτρο", "switch": "Εναλλαγή", - "math-templatization-tooltip": "Υποστηρίζει templatization με $[messageKey] και ${metadataKey}.", + "math-templatization-tooltip": "Αυτό το πεδίο υποστηρίζει παραμετροποίηση. Χρησιμοποιήστε $[messageKey] για να εξάγετε τιμή από το μήνυμα και ${metadataKey} για να εξάγετε τιμή από τα μεταδεδομένα.", "add-message-type": "Προσθήκη τύπου μηνύματος", - "select-message-types-required": "Απαιτείται τουλάχιστον ένας τύπος μηνύματος.", - "select-message-types": "Επιλογή τύπων μηνύματος", + "select-message-types-required": "Πρέπει να επιλεγεί τουλάχιστον ένας τύπος μηνύματος.", + "select-message-types": "Επιλογή τύπων μηνυμάτων", "no-message-types-found": "Δεν βρέθηκαν τύποι μηνυμάτων", "no-message-type-matching": "'{{messageType}}' δεν βρέθηκε.", "create-new-message-type": "Δημιουργία νέου.", @@ -4734,22 +4759,22 @@ "attributes-keys-required": "Απαιτούνται κλειδιά χαρακτηριστικών", "attributes-scope": "Πεδίο χαρακτηριστικών", "attributes-scope-value": "Τιμή πεδίου χαρακτηριστικών", - "attributes-scope-value-copy": "Αντιγραφή τιμής πεδίου", - "attributes-scope-hint": "Χρησιμοποιήστε το μεταδεδομένο 'scope' για δυναμική ρύθμιση. Εάν υπάρχει, παρακάμπτει τη ρύθμιση.", - "notify-device": "Εξαναγκασμένη ειδοποίηση συσκευής", - "send-attributes-updated-notification": "Αποστολή ειδοποίησης ενημέρωσης χαρακτηριστικών", - "send-attributes-updated-notification-hint": "Στέλνει ειδοποίηση ενημέρωσης ως ξεχωριστό μήνυμα στην ουρά.", - "send-attributes-deleted-notification": "Αποστολή ειδοποίησης διαγραφής χαρακτηριστικών", - "send-attributes-deleted-notification-hint": "Στέλνει ειδοποίηση διαγραφής ως ξεχωριστό μήνυμα στην ουρά.", - "update-attributes-only-on-value-change": "Αποθήκευση μόνο σε αλλαγή τιμής", - "update-attributes-only-on-value-change-hint": "Ενημερώνει σε κάθε μήνυμα ανεξαρτήτως αλλαγής. Μειώνει απόδοση.", - "update-attributes-only-on-value-change-hint-enabled": "Ενημερώνει μόνο αν αλλάξει τιμή. Διαφορετικά, δεν ενημερώνεται ούτε timestamp ούτε αποστέλλεται ειδοποίηση.", + "attributes-scope-value-copy": "Αντιγραφή τιμής πεδίου χαρακτηριστικών", + "attributes-scope-hint": "Χρησιμοποιήστε το metadata key 'scope' για να ορίσετε δυναμικά το πεδίο χαρακτηριστικών ανά μήνυμα. Αν παρέχεται, αυτό παρακάμπτει το πεδίο που έχει οριστεί στη ρύθμιση.", + "notify-device": "Αναγκαστική ειδοποίηση στη συσκευή", + "send-attributes-updated-notification": "Αποστολή ειδοποίησης για ενημερωμένα χαρακτηριστικά", + "send-attributes-updated-notification-hint": "Αποστολή ειδοποίησης για ενημερωμένα χαρακτηριστικά ως ξεχωριστό μήνυμα στην ουρά του rule engine.", + "send-attributes-deleted-notification": "Αποστολή ειδοποίησης για διαγραμμένα χαρακτηριστικά", + "send-attributes-deleted-notification-hint": "Αποστολή ειδοποίησης για διαγραμμένα χαρακτηριστικά ως ξεχωριστό μήνυμα στην ουρά του rule engine.", + "update-attributes-only-on-value-change": "Αποθήκευση χαρακτηριστικών μόνο αν αλλάξει η τιμή", + "update-attributes-only-on-value-change-hint": "Ενημερώνει τα χαρακτηριστικά σε κάθε εισερχόμενο μήνυμα ανεξαρτήτως αν η τιμή τους έχει αλλάξει. Αυξάνει τη χρήση API και μειώνει την απόδοση.", + "update-attributes-only-on-value-change-hint-enabled": "Ενημερώνει τα χαρακτηριστικά μόνο αν έχει αλλάξει η τιμή τους. Αν δεν έχει αλλάξει, δεν ενημερώνεται ούτε το χρονικό στιγμιότυπο ούτε αποστέλλεται ειδοποίηση αλλαγής χαρακτηριστικού.", "fetch-credentials-to-metadata": "Ανάκτηση διαπιστευτηρίων στα μεταδεδομένα", - "notify-device-on-update-hint": "Αν είναι ενεργό, ειδοποιεί τη συσκευή για ενημέρωση κοινών χαρακτηριστικών. Αλλιώς, ελέγχεται από το metadata 'notifyDevice'.", - "notify-device-on-delete-hint": "Αν είναι ενεργό, ειδοποιεί τη συσκευή για διαγραφή κοινών χαρακτηριστικών. Αλλιώς, ελέγχεται από το metadata 'notifyDevice'.", - "latest-timeseries": "Τελευταία δεδομένα χρονικής σειράς", - "timeseries-keys": "Κλειδιά χρονικής σειράς", - "timeseries-keys-required": "Απαιτείται τουλάχιστον ένα κλειδί χρονικής σειράς.", + "notify-device-on-update-hint": "Αν είναι ενεργό, αποστέλλεται υποχρεωτικά ειδοποίηση στη συσκευή για την ενημέρωση κοινών χαρακτηριστικών. Αν είναι ανενεργό, η συμπεριφορά ελέγχεται από την παράμετρο 'notifyDevice' στα μεταδεδομένα του μηνύματος. Για απενεργοποίηση ειδοποίησης, τα μεταδεδομένα πρέπει να περιέχουν την παράμετρο 'notifyDevice' ορισμένη σε 'false'. Σε κάθε άλλη περίπτωση, η ειδοποίηση θα σταλεί.", + "notify-device-on-delete-hint": "Αν είναι ενεργό, αποστέλλεται υποχρεωτικά ειδοποίηση στη συσκευή για την αφαίρεση κοινών χαρακτηριστικών. Αν είναι ανενεργό, η συμπεριφορά ελέγχεται από την παράμετρο 'notifyDevice' στα μεταδεδομένα του μηνύματος. Για ενεργοποίηση ειδοποίησης, τα μεταδεδομένα πρέπει να περιέχουν την παράμετρο 'notifyDevice' ορισμένη σε 'true'. Σε κάθε άλλη περίπτωση, δεν θα σταλεί ειδοποίηση.", + "latest-timeseries": "Τελευταία δεδομένα χρονοσειράς", + "timeseries-keys": "Κλειδιά χρονοσειρών", + "timeseries-keys-required": "Πρέπει να επιλεγεί τουλάχιστον ένα κλειδί χρονοσειράς.", "add-timeseries-key": "Προσθήκη κλειδιού χρονικής σειράς", "add-message-field": "Προσθήκη πεδίου μηνύματος", "relation-search-parameters": "Παράμετροι αναζήτησης σχέσεων", @@ -4759,14 +4784,14 @@ "copy-from": "Αντιγραφή από", "data-to-metadata": "Δεδομένα σε μεταδεδομένα", "metadata-to-data": "Μεταδεδομένα σε δεδομένα", - "use-regular-expression-hint": "Χρησιμοποιήστε κανονική έκφραση για αντιγραφή κλειδιών με βάση μοτίβα.\n\nΣυμβουλές:\nΠατήστε 'Enter' για να ολοκληρώσετε την εισαγωγή ονόματος πεδίου.\nΠατήστε 'Backspace' για διαγραφή.\nΥποστηρίζονται πολλαπλά ονόματα.", + "use-regular-expression-hint": "Χρησιμοποιήστε κανονική έκφραση για αντιγραφή κλειδιών κατά μοτίβο.\n\nΣυμβουλές & κόλπα:\nΠατήστε 'Enter' για να ολοκληρώσετε την εισαγωγή ονόματος πεδίου.\nΠατήστε 'Backspace' για να διαγράψετε όνομα πεδίου. Υποστηρίζονται πολλαπλά ονόματα πεδίων.", "interval": "Διάστημα", - "interval-required": "Απαιτείται διάστημα", + "interval-required": "Το διάστημα είναι υποχρεωτικό", "interval-hint": "Χρονικό διάστημα αποφυγής διπλοτύπων σε δευτερόλεπτα.", "interval-min-error": "Ελάχιστη επιτρεπτή τιμή είναι 1", "max-pending-msgs": "Μέγιστος αριθμός εκκρεμών μηνυμάτων", - "max-pending-msgs-hint": "Μέγιστος αριθμός μηνυμάτων στη μνήμη για κάθε μοναδικό id αποφυγής διπλοτύπων.", - "max-pending-msgs-required": "Απαιτείται μέγιστος αριθμός εκκρεμών μηνυμάτων", + "max-pending-msgs-hint": "Μέγιστος αριθμός μηνυμάτων που αποθηκεύονται στη μνήμη για κάθε μοναδικό αναγνωριστικό αποφυγής διπλοτύπων.", + "max-pending-msgs-required": "Ο μέγιστος αριθμός εκκρεμών μηνυμάτων είναι υποχρεωτικός", "max-pending-msgs-max-error": "Μέγιστη επιτρεπτή τιμή είναι 1000", "max-pending-msgs-min-error": "Ελάχιστη επιτρεπτή τιμή είναι 1", "max-retries": "Μέγιστες επαναλήψεις", @@ -4795,24 +4820,24 @@ "new-key-name": "Νέο όνομα κλειδιού", "new-key-name-required": "Απαιτείται νέο όνομα κλειδιού", "metadata-keys": "Ονόματα πεδίων μεταδεδομένων", - "json-path-expression": "Έκφραση JSON path", - "json-path-expression-required": "Απαιτείται έκφραση JSON path", - "json-path-expression-hint": "Το JSONPath καθορίζει διαδρομή προς στοιχείο JSON. Το '$' είναι η ρίζα.", + "json-path-expression": "Έκφραση διαδρομής JSON", + "json-path-expression-required": "Η έκφραση διαδρομής JSON είναι υποχρεωτική", + "json-path-expression-hint": "Η JSONPath καθορίζει μια διαδρομή προς ένα στοιχείο ή ένα σύνολο στοιχείων σε μια δομή JSON. Το '$' αντιπροσωπεύει το ριζικό αντικείμενο ή πίνακα.", "relations-query": "Ερώτημα σχέσεων", "device-relations-query": "Ερώτημα σχέσεων συσκευής", "max-relation-level": "Μέγιστο επίπεδο σχέσης", - "max-relation-level-error": "Η τιμή πρέπει να είναι > 0 ή να μην οριστεί.", - "max-relation-level-invalid": "Η τιμή πρέπει να είναι ακέραιος.", + "max-relation-level-error": "Η τιμή πρέπει να είναι μεγαλύτερη από 0 ή μη καθορισμένη.", + "max-relation-level-invalid": "Η τιμή πρέπει να είναι ακέραιος αριθμός.", "relation-type": "Τύπος σχέσης", "relation-type-pattern": "Μοτίβο τύπου σχέσης", - "relation-type-pattern-required": "Απαιτείται μοτίβο τύπου σχέσης", - "relation-types-list": "Τύποι σχέσεων για διάδοση", - "relation-types-list-hint": "Αν δεν επιλεγούν τύποι, διαδίδονται χωρίς φιλτράρισμα.", + "relation-type-pattern-required": "Το μοτίβο τύπου σχέσης είναι υποχρεωτικό", + "relation-types-list": "Τύποι σχέσεων για προώθηση", + "relation-types-list-hint": "Αν δεν επιλεγούν τύποι σχέσεων για προώθηση, οι συναγερμοί θα προωθούνται χωρίς φιλτράρισμα κατά τύπο σχέσης.", "unlimited-level": "Απεριόριστο επίπεδο", "latest-telemetry": "Τελευταία τηλεμετρία", "add-telemetry-key": "Προσθήκη κλειδιού τηλεμετρίας", "delete-from": "Διαγραφή από", - "use-regular-expression-delete-hint": "Χρησιμοποιήστε κανονικές εκφράσεις για διαγραφή με βάση μοτίβα.\n\nΣυμβουλές:\n'Enter' για επιβεβαίωση, 'Backspace' για διαγραφή.\nΥποστηρίζονται πολλά πεδία.", + "use-regular-expression-delete-hint": "Χρησιμοποιήστε κανονική έκφραση για διαγραφή κλειδιών κατά μοτίβο.\n\nΣυμβουλές & κόλπα:\nΠατήστε 'Enter' για να ολοκληρώσετε την εισαγωγή ονόματος πεδίου.\nΠατήστε 'Backspace' για διαγραφή ονόματος πεδίου.\nΥποστηρίζονται πολλαπλά ονόματα πεδίων.", "fetch-into": "Ανάκτηση σε", "attr-mapping": "Αντιστοίχιση χαρακτηριστικών:", "source-attribute": "Κλειδί προέλευσης χαρακτηριστικού", @@ -4829,19 +4854,19 @@ "fetch-circle-parameter-info-from-metadata-hint": "Το μεταδεδομένο '{{perimeterKeyName}}' πρέπει να έχει μορφή: {\"latitude\":48.196, \"longitude\":24.6532, \"radius\":100.0, \"radiusUnit\":\"METER\"}", "fetch-poligon-parameter-info-from-metadata-hint": "Το μεταδεδομένο '{{perimeterKeyName}}' πρέπει να έχει μορφή: [[48.19736,24.65235],[48.19800,24.65060],...,[48.19849,24.65420]]", "short-templatization-tooltip": "Χρησιμοποιήστε $[messageKey] και ${metadataKey} για εξαγωγή τιμής.", - "fields-mapping-required": "Απαιτείται τουλάχιστον μία αντιστοίχιση πεδίου.", - "at-least-one-field-required": "Πρέπει να καθοριστεί τουλάχιστον ένα πεδίο με τιμή.", - "originator-fields-sv-map-hint": "Τα πεδία προορισμού υποστηρίζουν templatization με $[messageKey] και ${metadataKey}.", - "sv-map-hint": "Μόνο τα πεδία προορισμού υποστηρίζουν templatization με $[messageKey] και ${metadataKey}.", + "fields-mapping-required": "Πρέπει να καθοριστεί τουλάχιστον μία αντιστοίχιση πεδίου.", + "at-least-one-field-required": "Πρέπει να δοθεί τιμή τουλάχιστον σε ένα πεδίο εισόδου.", + "originator-fields-sv-map-hint": "Τα πεδία κλειδιών προορισμού υποστηρίζουν παραμετροποίηση. Χρησιμοποιήστε $[messageKey] για εξαγωγή τιμής από το μήνυμα και ${metadataKey} για εξαγωγή από τα μεταδεδομένα.", + "sv-map-hint": "Μόνο τα πεδία κλειδιών προορισμού υποστηρίζουν παραμετροποίηση. Χρησιμοποιήστε $[messageKey] για εξαγωγή τιμής από το μήνυμα και ${metadataKey} για εξαγωγή από τα μεταδεδομένα.", "source-field": "Πεδίο προέλευσης", - "source-field-required": "Απαιτείται πεδίο προέλευσης.", - "originator-source": "Προέλευση", - "new-originator": "Νέα προέλευση", + "source-field-required": "Το πεδίο προέλευσης είναι υποχρεωτικό.", + "originator-source": "Προέλευση αποστολέα", + "new-originator": "Νέος αποστολέας", "originator-customer": "Πελάτης", "originator-tenant": "Ενοικιαστής", - "originator-related": "Συσχετιζόμενη οντότητα", + "originator-related": "Σχετική οντότητα", "originator-alarm-originator": "Προέλευση συναγερμού", - "originator-entity": "Οντότητα με μοτίβο ονόματος", + "originator-entity": "Οντότητα βάσει προτύπου ονόματος", "clone-message": "Κλωνοποίηση μηνύματος", "transform": "Μετασχηματισμός", "default-ttl": "Προεπιλεγμένο TTL", @@ -4860,23 +4885,23 @@ "min-generation-frequency-message": "Ελάχιστο 60 δευτερόλεπτα επιτρέπεται.", "script-lang-tbel": "TBEL", "script-lang-js": "JS", - "use-metadata-period-in-seconds-patterns": "Χρήση μοτίβου περιόδου από μεταδεδομένα", - "use-metadata-period-in-seconds-patterns-hint": "Αν επιλεγεί, θα χρησιμοποιείται μοτίβο περιόδου σε δευτερόλεπτα από μεταδεδομένα ή δεδομένα.", - "period-in-seconds-pattern": "Μοτίβο περιόδου σε δευτερόλεπτα", - "period-in-seconds-pattern-required": "Απαιτείται μοτίβο περιόδου.", - "min-period-seconds-message": "Μόνο 60 δευτερόλεπτα ελάχιστο επιτρέπεται.", - "originator": "Προέλευση", + "use-metadata-period-in-seconds-patterns": "Χρήση μοτίβου διάρκειας σε δευτερόλεπτα", + "use-metadata-period-in-seconds-patterns-hint": "Αν επιλεγεί, ο κόμβος κανόνα θα χρησιμοποιεί μοτίβο διάρκειας σε δευτερόλεπτα από τα μεταδεδομένα ή τα δεδομένα του μηνύματος, υποθέτοντας ότι οι διάρκειες είναι σε δευτερόλεπτα.", + "period-in-seconds-pattern": "Μοτίβο διάρκειας σε δευτερόλεπτα", + "period-in-seconds-pattern-required": "Το μοτίβο διάρκειας σε δευτερόλεπτα είναι υποχρεωτικό", + "min-period-seconds-message": "Επιτρέπεται μόνο ελάχιστη διάρκεια 60 δευτερολέπτων.", + "originator": "Αποστολέας", "message-body": "Σώμα μηνύματος", "message-metadata": "Μεταδεδομένα μηνύματος", "generate": "Δημιουργία", - "current-rule-node": "Τρέχον Node Κανόνα", + "current-rule-node": "Τρέχων κόμβος κανόνα", "current-tenant": "Τρέχων ενοικιαστής", "generator-function": "Συνάρτηση δημιουργίας", "test-generator-function": "Δοκιμή συνάρτησης δημιουργίας", - "generator": "Γεννήτρια", - "test-filter-function": "Δοκιμή συνάρτησης φίλτρου", - "test-switch-function": "Δοκιμή συνάρτησης διακόπτη", - "test-transformer-function": "Δοκιμή συνάρτησης μετασχηματιστή", + "generator": "Δημιουργός", + "test-filter-function": "Δοκιμή συνάρτησης φιλτραρίσματος", + "test-switch-function": "Δοκιμή συνάρτησης εναλλαγής", + "test-transformer-function": "Δοκιμή συνάρτησης μετασχηματισμού", "transformer": "Μετασχηματιστής", "alarm-create-condition": "Συνθήκη δημιουργίας συναγερμού", "test-condition-function": "Δοκιμή συνθήκης", @@ -4907,22 +4932,22 @@ "from-metadata": "Από μεταδεδομένα", "to-template": "Προς", "to-template-required": "Απαιτείται πεδίο Προς", - "mail-address-list-template-hint": "Λίστα διευθύνσεων χωρισμένη με κόμμα, χρησιμοποιήστε ${metadataKey} για τιμή από τα μεταδεδομένα, $[messageKey] για τιμή από το σώμα του μηνύματος", - "cc-template": "Cc", - "bcc-template": "Bcc", + "mail-address-list-template-hint": "Λίστα διευθύνσεων χωρισμένη με κόμμα, χρησιμοποιήστε ${metadataKey} για τιμή από τα μεταδεδομένα, $[messageKey] για τιμή από το σώμα του μηνύματος", + "cc-template": "Κοινοποίηση (Cc)", + "bcc-template": "Κρυφή κοινοποίηση (Bcc)", "subject-template": "Θέμα", - "subject-template-required": "Απαιτείται πεδίο Θέμα", - "body-template": "Σώμα", - "body-template-required": "Απαιτείται πεδίο Σώμα", - "dynamic-mail-body-type": "Δυναμικός τύπος σώματος", + "subject-template-required": "Το πρότυπο θέματος είναι υποχρεωτικό", + "body-template": "Κείμενο", + "body-template-required": "Το πρότυπο κειμένου είναι υποχρεωτικό", + "dynamic-mail-body-type": "Δυναμικός τύπος σώματος email", "mail-body-type": "Τύπος σώματος email", "body-type-template": "Πρότυπο τύπου σώματος", "reply-routing-configuration": "Διαμόρφωση δρομολόγησης απάντησης", - "rpc-reply-routing-configuration-hint": "Καθορίζει metadata κλειδιά για προσδιορισμό υπηρεσίας, συνεδρίας και αιτήματος για αποστολή απάντησης.", - "reply-routing-configuration-hint": "Καθορίζει metadata κλειδιά για προσδιορισμό υπηρεσίας και αιτήματος για απάντηση.", - "request-id-metadata-attribute": "Id Αιτήματος", - "service-id-metadata-attribute": "Id Υπηρεσίας", - "session-id-metadata-attribute": "Id Συνεδρίας", + "rpc-reply-routing-configuration-hint": "Αυτές οι ρυθμίσεις καθορίζουν τα ονόματα των κλειδιών μεταδεδομένων που χρησιμοποιούνται για τον προσδιορισμό της υπηρεσίας, της συνεδρίας και του αιτήματος για την αποστολή απάντησης.", + "reply-routing-configuration-hint": "Αυτές οι ρυθμίσεις καθορίζουν τα ονόματα των κλειδιών μεταδεδομένων που χρησιμοποιούνται για τον προσδιορισμό της υπηρεσίας και του αιτήματος για την αποστολή απάντησης.", + "request-id-metadata-attribute": "Αναγνωριστικό αιτήματος", + "service-id-metadata-attribute": "Αναγνωριστικό υπηρεσίας", + "session-id-metadata-attribute": "Αναγνωριστικό συνεδρίας", "timeout-sec": "Χρονικό όριο (δευτερόλεπτα)", "timeout-required": "Απαιτείται χρονικό όριο", "min-timeout-message": "Μόνο τιμή 0 επιτρέπεται ως ελάχιστο χρονικό όριο.", @@ -5007,26 +5032,26 @@ "gcp-service-account-key-required": "Απαιτείται αρχείο κλειδιού GCP", "pubsub-topic-name": "Όνομα θέματος", "pubsub-topic-name-required": "Απαιτείται όνομα θέματος", - "message-attributes": "Ιδιότητες μηνύματος", - "message-attributes-hint": "Χρησιμοποιήστε ${metadataKey} για τιμή από τα μεταδεδομένα, $[messageKey] για τιμή από το σώμα του μηνύματος στα πεδία ονόματος/τιμής", - "connect-timeout": "Χρονικό όριο σύνδεσης (δευτ)", - "connect-timeout-required": "Απαιτείται χρονικό όριο σύνδεσης.", - "connect-timeout-range": "Το χρονικό όριο πρέπει να είναι από 1 έως 200.", + "message-attributes": "Χαρακτηριστικά μηνύματος", + "message-attributes-hint": "Χρησιμοποιήστε ${metadataKey} για τιμή από τα μεταδεδομένα και $[messageKey] για τιμή από το σώμα του μηνύματος στα πεδία ονόματος/τιμής", + "connect-timeout": "Χρονικό όριο σύνδεσης (δευτ.)", + "connect-timeout-required": "Το χρονικό όριο σύνδεσης είναι υποχρεωτικό.", + "connect-timeout-range": "Το χρονικό όριο σύνδεσης πρέπει να είναι από 1 έως 200.", "client-id": "Client ID", - "client-id-hint": "Προαιρετικό. Αφήστε κενό για αυτόματη δημιουργία. Αν δοθεί, να είναι μοναδικό.", - "append-client-id-suffix": "Προσθήκη ID υπηρεσίας στο Client ID", - "client-id-suffix-hint": "Εφαρμόζεται όταν δίνεται Client ID. Προσθέτει το ID υπηρεσίας ως επίθημα για αποφυγή συγκρούσεων.", - "device-id": "ID Συσκευής", - "device-id-required": "Απαιτείται ID Συσκευής", + "client-id-hint": "Προαιρετικό. Αφήστε κενό για αυτόματη δημιουργία Client ID. Προσοχή κατά τον καθορισμό του Client ID. Οι περισσότεροι MQTT brokers δεν επιτρέπουν πολλαπλές συνδέσεις με το ίδιο Client ID. Για να συνδεθείτε σε τέτοιους brokers, το Client ID σας πρέπει να είναι μοναδικό. Όταν η πλατφόρμα εκτελείται σε λειτουργία μικροϋπηρεσιών, κάθε μικροϋπηρεσία θα εκτελεί αντίγραφο του rule node. Αυτό μπορεί να προκαλέσει αποτυχίες. Για αποφυγή, ενεργοποιήστε την επιλογή \"Προσθήκη Service ID ως επίθημα στο Client ID\" παρακάτω.", + "append-client-id-suffix": "Προσθήκη Service ID ως επίθημα στο Client ID", + "client-id-suffix-hint": "Προαιρετικό. Εφαρμόζεται όταν το \"Client ID\" καθορίζεται ρητά. Αν επιλεγεί, το Service ID θα προστεθεί ως επίθημα στο Client ID. Χρήσιμο για αποφυγή αποτυχιών σε λειτουργία μικροϋπηρεσιών.", + "device-id": "Device ID", + "device-id-required": "Το Device ID είναι υποχρεωτικό.", "clean-session": "Καθαρή συνεδρία", "enable-ssl": "Ενεργοποίηση SSL", "credentials": "Διαπιστευτήρια", "credentials-type": "Τύπος διαπιστευτηρίων", - "credentials-type-required": "Απαιτείται τύπος διαπιστευτηρίων.", + "credentials-type-required": "Ο τύπος διαπιστευτηρίων είναι υποχρεωτικός.", "credentials-anonymous": "Ανώνυμα", "credentials-basic": "Βασικά", "credentials-pem": "PEM", - "credentials-pem-hint": "Απαιτείται τουλάχιστον το αρχείο πιστοποιητικού Server CA ή το ζεύγος Client certificate και Client private key", + "credentials-pem-hint": "Απαιτείται τουλάχιστον αρχείο Server CA ή ζεύγος αρχείων Client certificate και Client private key", "credentials-sas": "Shared Access Signature", "sas-key": "SAS Κλειδί", "sas-key-required": "Απαιτείται SAS Κλειδί.", @@ -5043,23 +5068,23 @@ "private-key-password": "Κωδικός ιδιωτικού κλειδιού", "use-system-smtp-settings": "Χρήση ρυθμίσεων SMTP του συστήματος", "use-metadata-dynamic-interval": "Χρήση δυναμικού διαστήματος", - "metadata-dynamic-interval-hint": "Υποστηρίζεται τεμπλοποίηση στα πεδία. Τιμές σε milliseconds.", - "use-metadata-interval-patterns-hint": "Αν επιλεγεί, χρησιμοποιούνται μοτίβα από metadata για αρχή/τέλος διαστήματος (ms).", + "metadata-dynamic-interval-hint": "Τα πεδία εισόδου για την αρχή και το τέλος του διαστήματος υποστηρίζουν παραμετροποίηση. Σημειώστε ότι η τιμή του προτύπου που αντικαθίσταται πρέπει να είναι σε χιλιοστά του δευτερολέπτου. Χρησιμοποιήστε $[messageKey] για εξαγωγή τιμής από το μήνυμα και ${metadataKey} για εξαγωγή από τα μεταδεδομένα.", + "use-metadata-interval-patterns-hint": "Αν επιλεγεί, ο κόμβος κανόνα θα χρησιμοποιεί μοτίβα για την αρχή και το τέλος του διαστήματος από τα μεταδεδομένα ή τα δεδομένα του μηνύματος, υποθέτοντας ότι τα διαστήματα είναι σε χιλιοστά του δευτερολέπτου.", "use-message-alarm-data": "Χρήση δεδομένων συναγερμού από το μήνυμα", "overwrite-alarm-details": "Αντικατάσταση λεπτομερειών συναγερμού", "use-alarm-severity-pattern": "Χρήση μοτίβου σοβαρότητας συναγερμού", - "check-all-keys": "Έλεγχος παρουσίας όλων των πεδίων", - "check-all-keys-hint": "Αν επιλεγεί, ελέγχεται η παρουσία όλων των καθορισμένων κλειδιών.", + "check-all-keys": "Έλεγχος ότι όλα τα καθορισμένα πεδία είναι παρόντα", + "check-all-keys-hint": "Αν επιλεγεί, ελέγχει ότι όλα τα καθορισμένα κλειδιά υπάρχουν στα δεδομένα και τα μεταδεδομένα του μηνύματος.", "check-relation-to-specific-entity": "Έλεγχος σχέσης με συγκεκριμένη οντότητα", - "check-relation-to-specific-entity-tooltip": "Αν ενεργοποιηθεί, ελέγχει για συγκεκριμένη οντότητα αντί για οποιαδήποτε.", - "check-relation-hint": "Ελέγχει ύπαρξη σχέσης με βάση κατεύθυνση και τύπο.", + "check-relation-to-specific-entity-tooltip": "Αν είναι ενεργό, ελέγχει την ύπαρξη σχέσης με μία συγκεκριμένη οντότητα, διαφορετικά ελέγχει για οποιαδήποτε οντότητα. Και στις δύο περιπτώσεις, η αναζήτηση γίνεται με βάση την κατεύθυνση και τον τύπο σχέσης.", + "check-relation-hint": "Ελέγχει την ύπαρξη σχέσης με συγκεκριμένη ή οποιαδήποτε οντότητα βάσει κατεύθυνσης και τύπου σχέσης.", "delete-relation-with-specific-entity": "Διαγραφή σχέσης με συγκεκριμένη οντότητα", - "delete-relation-with-specific-entity-hint": "Αν ενεργοποιηθεί, διαγράφει μόνο τη συγκεκριμένη σχέση.", - "delete-relation-hint": "Διαγράφει σχέσεις από originator προς οντότητα/οντότητες με βάση κατεύθυνση/τύπο.", + "delete-relation-with-specific-entity-hint": "Αν είναι ενεργό, θα διαγράψει τη σχέση μόνο με μία συγκεκριμένη οντότητα. Διαφορετικά, θα διαγραφεί η σχέση με όλες τις οντότητες που ταιριάζουν.", + "delete-relation-hint": "Διαγράφει τη σχέση από τον αποστολέα του εισερχόμενου μηνύματος προς την καθορισμένη οντότητα ή λίστα οντοτήτων με βάση την κατεύθυνση και τον τύπο.", "remove-current-relations": "Αφαίρεση τρεχουσών σχέσεων", - "remove-current-relations-hint": "Αφαιρεί σχέσεις από τον originator.", - "change-originator-to-related-entity": "Αλλαγή originator σε σχετική οντότητα", - "change-originator-to-related-entity-hint": "Επεξεργασία μηνύματος ως από άλλη οντότητα.", + "remove-current-relations-hint": "Αφαιρεί τις τρέχουσες σχέσεις από τον αποστολέα του εισερχόμενου μηνύματος βάσει κατεύθυνσης και τύπου.", + "change-originator-to-related-entity": "Αλλαγή αποστολέα σε σχετική οντότητα", + "change-originator-to-related-entity-hint": "Χρησιμοποιείται για την επεξεργασία του μηνύματος ως μήνυμα από άλλη οντότητα.", "start-interval": "Έναρξη διαστήματος", "end-interval": "Τέλος διαστήματος", "start-interval-required": "Απαιτείται έναρξη διαστήματος.", @@ -5077,25 +5102,25 @@ "enable-tls": "Ενεργοποίηση TLS", "tls-version": "Έκδοση TLS", "enable-proxy": "Ενεργοποίηση proxy", - "use-system-proxy-properties": "Χρήση proxy ρυθμίσεων συστήματος", - "proxy-host": "Host proxy", - "proxy-host-required": "Απαιτείται proxy host.", + "use-system-proxy-properties": "Χρήση ρυθμίσεων proxy συστήματος", + "proxy-host": "Διακομιστής proxy", + "proxy-host-required": "Ο διακομιστής proxy είναι υποχρεωτικός.", "proxy-port": "Θύρα proxy", - "proxy-port-required": "Απαιτείται θύρα proxy.", + "proxy-port-required": "Η θύρα proxy είναι υποχρεωτική.", "proxy-port-range": "Η θύρα proxy πρέπει να είναι από 1 έως 65535.", "proxy-user": "Χρήστης proxy", "proxy-password": "Κωδικός proxy", "proxy-scheme": "Σχήμα proxy", - "numbers-to-template": "Πρότυπο τηλεφώνων", - "numbers-to-template-required": "Απαιτείται πρότυπο τηλεφώνων", - "numbers-to-template-hint": "Αριθμοί τηλεφώνου χωρισμένοι με κόμμα, χρησιμοποιήστε ${metadataKey} για τιμή από τα μεταδεδομένα, $[messageKey] για τιμή από το σώμα του μηνύματος", + "numbers-to-template": "Πρότυπο αποδεκτών αριθμών τηλεφώνου", + "numbers-to-template-required": "Το πρότυπο αποδεκτών αριθμών τηλεφώνου είναι υποχρεωτικό", + "numbers-to-template-hint": "Αριθμοί τηλεφώνου χωρισμένοι με κόμμα, χρησιμοποιήστε ${metadataKey} για τιμή από τα μεταδεδομένα, $[messageKey] για τιμή από το σώμα του μηνύματος", "sms-message-template": "Πρότυπο μηνύματος SMS", - "sms-message-template-required": "Απαιτείται πρότυπο μηνύματος SMS", - "use-system-sms-settings": "Χρήση ρυθμίσεων SMS συστήματος", - "min-period-0-seconds-message": "Μόνο τιμή 0 επιτρέπεται ως ελάχιστη περίοδος.", + "sms-message-template-required": "Το πρότυπο μηνύματος SMS είναι υποχρεωτικό", + "use-system-sms-settings": "Χρήση ρυθμίσεων SMS του συστήματος", + "min-period-0-seconds-message": "Μόνο 0 δευτερόλεπτα επιτρέπονται ως ελάχιστη διάρκεια.", "max-pending-messages": "Μέγιστος αριθμός εκκρεμών μηνυμάτων", - "max-pending-messages-required": "Απαιτείται μέγιστος αριθμός εκκρεμών μηνυμάτων.", - "max-pending-messages-range": "Ο μέγιστος αριθμός εκκρεμών μηνυμάτων πρέπει να είναι εντός του εύρους από 1 έως 100000.", + "max-pending-messages-required": "Ο μέγιστος αριθμός εκκρεμών μηνυμάτων είναι υποχρεωτικός.", + "max-pending-messages-range": "Ο μέγιστος αριθμός εκκρεμών μηνυμάτων πρέπει να είναι από 1 έως 100000.", "originator-types-filter": "Φίλτρο τύπων αποστολέα", "interval-seconds": "Διάστημα σε δευτερόλεπτα", "interval-seconds-required": "Απαιτείται διάστημα.", @@ -5119,28 +5144,28 @@ "email-sender": "Αποστολέας Email", "fields-to-check": "Πεδία προς έλεγχο", "add-detail": "Προσθήκη λεπτομέρειας", - "check-all-keys-tooltip": "Εάν ενεργοποιηθεί, ελέγχει την παρουσία όλων των πεδίων που αναφέρονται στα ονόματα πεδίων μηνύματος και μεταδεδομένων στο εισερχόμενο μήνυμα και τα μεταδεδομένα του.", - "fields-to-check-hint": "Πατήστε \"Enter\" για να ολοκληρώσετε την εισαγωγή πεδίου. Υποστηρίζονται πολλά πεδία.", + "check-all-keys-tooltip": "Αν είναι ενεργό, ελέγχει την παρουσία όλων των πεδίων που αναφέρονται στα δεδομένα και τα μεταδεδομένα του εισερχόμενου μηνύματος.", + "fields-to-check-hint": "Πατήστε \"Enter\" για να ολοκληρώσετε την εισαγωγή ονόματος πεδίου. Υποστηρίζονται πολλαπλά ονόματα πεδίων.", "entity-details-list-empty": "Πρέπει να επιλεγεί τουλάχιστον μία λεπτομέρεια.", "alarm-status": "Κατάσταση συναγερμού", "alarm-required": "Πρέπει να επιλεγεί τουλάχιστον μία κατάσταση συναγερμού.", - "no-entity-details-matching": "Δεν βρέθηκαν αντίστοιχες λεπτομέρειες οντοτήτων.", + "no-entity-details-matching": "Δεν βρέθηκαν αντιστοιχίες στις λεπτομέρειες οντοτήτων.", "custom-table-name": "Προσαρμοσμένο όνομα πίνακα", - "custom-table-name-required": "Απαιτείται όνομα πίνακα", - "custom-table-hint": "Ο πίνακας πρέπει να έχει δημιουργηθεί στον Cassandra cluster και το όνομά του να ξεκινά με 'cs_tb_'. Εισαγάγετε το όνομα χωρίς το πρόθεμα.", + "custom-table-name-required": "Το όνομα πίνακα είναι υποχρεωτικό", + "custom-table-hint": "Ο πίνακας πρέπει να έχει δημιουργηθεί στο Cassandra cluster και το όνομά του να ξεκινά με το πρόθεμα 'cs_tb_' ώστε να αποφευχθεί η εισαγωγή δεδομένων στους κοινούς πίνακες του TB. Εισάγετε το όνομα χωρίς το πρόθεμα 'cs_tb_'.", "message-field": "Πεδίο μηνύματος", - "message-field-required": "Απαιτείται πεδίο μηνύματος.", + "message-field-required": "Το πεδίο μηνύματος είναι υποχρεωτικό.", "table-col": "Στήλη πίνακα", - "table-col-required": "Απαιτείται στήλη πίνακα.", + "table-col-required": "Η στήλη πίνακα είναι υποχρεωτική.", "latitude-field-name": "Όνομα πεδίου γεωγραφικού πλάτους", "longitude-field-name": "Όνομα πεδίου γεωγραφικού μήκους", - "latitude-field-name-required": "Απαιτείται όνομα πεδίου γεωγραφικού πλάτους.", - "longitude-field-name-required": "Απαιτείται όνομα πεδίου γεωγραφικού μήκους.", + "latitude-field-name-required": "Το όνομα πεδίου γεωγραφικού πλάτους είναι υποχρεωτικό.", + "longitude-field-name-required": "Το όνομα πεδίου γεωγραφικού μήκους είναι υποχρεωτικό.", "fetch-perimeter-info-from-metadata": "Ανάκτηση πληροφοριών περιμέτρου από μεταδεδομένα", - "fetch-perimeter-info-from-metadata-tooltip": "Εάν ο τύπος περιμέτρου είναι 'Polygon', η τιμή του πεδίου '{{perimeterKeyName}}' χρησιμοποιείται απευθείας. Αν είναι 'Circle', το πεδίο αναλύεται για εξαγωγή 'latitude', 'longitude', 'radius', 'radiusUnit'.", + "fetch-perimeter-info-from-metadata-tooltip": "Αν ο τύπος περιμέτρου έχει οριστεί ως 'Πολύγωνο', η τιμή του πεδίου μεταδεδομένων '{{perimeterKeyName}}' θα χρησιμοποιηθεί ως ορισμός περιμέτρου χωρίς επιπλέον ανάλυση. Διαφορετικά, αν ο τύπος περιμέτρου είναι 'Κύκλος', η τιμή του πεδίου μεταδεδομένων '{{perimeterKeyName}}' θα αναλυθεί ώστε να εξαχθούν τα πεδία 'latitude', 'longitude', 'radius', 'radiusUnit' που χρησιμοποιούνται για τον ορισμό κυκλικής περιμέτρου.", "perimeter-key-name": "Όνομα κλειδιού περιμέτρου", - "perimeter-key-name-hint": "Όνομα πεδίου μεταδεδομένων που περιέχει πληροφορίες περιμέτρου.", - "perimeter-key-name-required": "Απαιτείται όνομα κλειδιού περιμέτρου.", + "perimeter-key-name-hint": "Όνομα πεδίου μεταδεδομένων που περιλαμβάνει πληροφορίες περιμέτρου.", + "perimeter-key-name-required": "Το όνομα κλειδιού περιμέτρου είναι υποχρεωτικό.", "perimeter-circle": "Κύκλος", "perimeter-polygon": "Πολύγωνο", "perimeter-type": "Τύπος περιμέτρου", @@ -5158,20 +5183,20 @@ "range": "Απόσταση", "range-required": "Απαιτείται απόσταση.", "polygon-definition": "Ορισμός πολυγώνου", - "polygon-definition-required": "Απαιτείται ορισμός πολυγώνου.", - "polygon-definition-hint": "Χρησιμοποιήστε μορφή: [[lat1,lon1],[lat2,lon2],...,[latN,lonN]].", + "polygon-definition-required": "Ο ορισμός πολυγώνου είναι υποχρεωτικός.", + "polygon-definition-hint": "Χρησιμοποιήστε την εξής μορφή για χειροκίνητο ορισμό πολυγώνου: [[lat1,lon1],[lat2,lon2], ... ,[latN,lonN]].", "min-inside-duration": "Ελάχιστη διάρκεια εντός", - "min-inside-duration-value-required": "Απαιτείται ελάχιστη διάρκεια εντός.", + "min-inside-duration-value-required": "Η ελάχιστη διάρκεια εντός είναι υποχρεωτική", "min-inside-duration-time-unit": "Μονάδα χρόνου ελάχιστης διάρκειας εντός", "min-outside-duration": "Ελάχιστη διάρκεια εκτός", - "min-outside-duration-value-required": "Απαιτείται ελάχιστη διάρκεια εκτός.", + "min-outside-duration-value-required": "Η ελάχιστη διάρκεια εκτός είναι υποχρεωτική", "min-outside-duration-time-unit": "Μονάδα χρόνου ελάχιστης διάρκειας εκτός", - "tell-failure-if-absent": "Αναφορά αποτυχίας αν απουσιάζει", - "tell-failure-if-absent-hint": "Αν λείπει κάποιο κλειδί, θα επιστραφεί μήνυμα \"Failure\".", - "get-latest-value-with-ts": "Ανάκτηση χρονικής σήμανσης για την τελευταία τιμή", - "get-latest-value-with-ts-hint": "Αν ενεργοποιηθεί, οι τιμές τηλεμετρίας θα περιλαμβάνουν και χρονική σήμανση.", + "tell-failure-if-absent": "Αναφορά αποτυχίας", + "tell-failure-if-absent-hint": "Αν τουλάχιστον ένα από τα επιλεγμένα κλειδιά δεν υπάρχει, το εξερχόμενο μήνυμα θα αναφέρει \"Αποτυχία\".", + "get-latest-value-with-ts": "Ανάκτηση χρονικής σήμανσης για τις τελευταίες τιμές τηλεμετρίας", + "get-latest-value-with-ts-hint": "Αν επιλεγεί, οι τελευταίες τιμές τηλεμετρίας θα περιλαμβάνουν και χρονική σήμανση, π.χ.: \"temp\": \"{\"ts\":1574329385897, \"value\":42}\"", "ignore-null-strings": "Αγνόηση κενών συμβολοσειρών", - "ignore-null-strings-hint": "Αν ενεργοποιηθεί, οι κενές τιμές αγνοούνται.", + "ignore-null-strings-hint": "Αν επιλεγεί, ο κόμβος κανόνα θα αγνοεί πεδία οντοτήτων με κενή τιμή.", "add-metadata-key-values-as-kafka-headers": "Προσθήκη μεταδεδομένων στα Kafka headers", "add-metadata-key-values-as-kafka-headers-hint": "Τα ζεύγη μεταδεδομένων προστίθενται ως headers στην Kafka εγγραφή.", "charset-encoding": "Κωδικοποίηση χαρακτήρων", @@ -5182,33 +5207,33 @@ "charset-utf-16be": "UTF-16BE", "charset-utf-16le": "UTF-16LE", "charset-utf-16": "UTF-16", - "select-queue-hint": "Μπορείτε να επιλέξετε από τη λίστα ή να προσθέσετε δικό σας όνομα.", - "device-profile-node-hint": "Χρήσιμο για συνθήκες διάρκειας/επαναλήψεων.", - "persist-alarm-rules": "Αποθήκευση κατάστασης κανόνων συναγερμού", - "persist-alarm-rules-hint": "Εάν ενεργοποιηθεί, η κατάσταση θα αποθηκεύεται στη βάση.", - "fetch-alarm-rules": "Ανάκτηση κατάστασης κανόνων συναγερμού", - "fetch-alarm-rules-hint": "Εάν ενεργοποιηθεί, η κατάσταση αποκαθίσταται κατά την αρχικοποίηση.", - "input-value-key": "Κλειδί εισερχόμενης τιμής", - "input-value-key-required": "Απαιτείται κλειδί εισερχόμενης τιμής.", + "select-queue-hint": "Το όνομα της ουράς μπορεί να επιλεγεί από μια λίστα ή να εισαχθεί προσαρμοσμένο όνομα.", + "device-profile-node-hint": "Χρήσιμο όταν υπάρχουν συνθήκες διάρκειας ή επανάληψης για να διασφαλιστεί η συνέχεια της αξιολόγησης κατάστασης του συναγερμού.", + "persist-alarm-rules": "Διατήρηση κατάστασης κανόνων συναγερμών", + "persist-alarm-rules-hint": "Αν είναι ενεργό, ο κόμβος κανόνα θα αποθηκεύει την κατάσταση επεξεργασίας στη βάση δεδομένων.", + "fetch-alarm-rules": "Ανάκτηση κατάστασης κανόνων συναγερμών", + "fetch-alarm-rules-hint": "Αν είναι ενεργό, ο κόμβος κανόνα θα επαναφέρει την κατάσταση επεξεργασίας κατά την εκκίνηση και θα διασφαλίζει ότι οι συναγερμοί θα ενεργοποιούνται ακόμη και μετά από επανεκκινήσεις του διακομιστή. Διαφορετικά, η κατάσταση θα επαναφέρεται όταν ληφθεί το πρώτο μήνυμα από τη συσκευή.", + "input-value-key": "Κλειδί εισόδου τιμής", + "input-value-key-required": "Το κλειδί εισόδου τιμής είναι υποχρεωτικό.", "output-value-key": "Κλειδί εξόδου τιμής", - "output-value-key-required": "Απαιτείται το κλειδί εξόδου τιμής.", - "number-of-digits-after-floating-point": "Αριθμός ψηφίων μετά την υποδιαστολή", - "number-of-digits-after-floating-point-range": "Ο αριθμός ψηφίων πρέπει να είναι από 0 έως 15.", - "failure-if-delta-negative": "Αναφορά αποτυχίας αν η διαφορά είναι αρνητική", - "failure-if-delta-negative-tooltip": "Ο κόμβος κανόνα αποτυγχάνει την επεξεργασία αν η τιμή διαφοράς είναι αρνητική.", - "use-caching": "Χρήση προσωρινής αποθήκευσης", - "use-caching-tooltip": "Ο κόμβος κανόνα θα αποθηκεύει προσωρινά την τιμή του \"{{inputValueKey}}\" για βελτίωση απόδοσης.", - "add-time-difference-between-readings": "Προσθήκη χρονικής διαφοράς μεταξύ των αναγνώσεων \"{{inputValueKey}}\"", - "add-time-difference-between-readings-tooltip": "Αν ενεργοποιηθεί, η διαφορά χρόνου θα προστεθεί στο εξερχόμενο μήνυμα ως \"{{periodValueKey}}\".", + "output-value-key-required": "Το κλειδί εξόδου τιμής είναι υποχρεωτικό.", + "number-of-digits-after-floating-point": "Αριθμός δεκαδικών ψηφίων", + "number-of-digits-after-floating-point-range": "Ο αριθμός δεκαδικών πρέπει να είναι από 0 έως 15.", + "failure-if-delta-negative": "Αναφορά αποτυχίας αν το delta είναι αρνητικό", + "failure-if-delta-negative-tooltip": "Ο κόμβος κανόνα προκαλεί αποτυχία επεξεργασίας μηνύματος αν η τιμή delta είναι αρνητική.", + "use-caching": "Χρήση προσωρινής αποθήκευσης (caching)", + "use-caching-tooltip": "Ο κόμβος κανόνα θα αποθηκεύει προσωρινά την τιμή του \"{{inputValueKey}}\" από το εισερχόμενο μήνυμα για βελτίωση της απόδοσης. Σημειώστε ότι η προσωρινή αποθήκευση δεν θα ενημερωθεί αν τροποποιήσετε την τιμή του \"{{inputValueKey}}\" αλλού.", + "add-time-difference-between-readings": "Προσθήκη διαφοράς χρόνου μεταξύ των τιμών \"{{inputValueKey}}\"", + "add-time-difference-between-readings-tooltip": "Αν είναι ενεργό, ο κόμβος κανόνα θα προσθέτει την τιμή \"{{periodValueKey}}\" στο εξερχόμενο μήνυμα.", "period-value-key": "Κλειδί τιμής περιόδου", - "period-value-key-required": "Απαιτείται κλειδί τιμής περιόδου.", - "general-pattern-hint": "Χρησιμοποιήστε ${metadataKey} για τιμή από μεταδεδομένα και $[messageKey] για τιμή από το σώμα μηνύματος.", - "alarm-severity-pattern-hint": "Χρησιμοποιήστε ${metadataKey} για τιμή από τα μεταδεδομένα, $[messageKey] για τιμή από το σώμα του μηνύματος. Η σοβαρότητα του συναγερμού πρέπει να είναι συστημική (CRITICAL, MAJOR κ.λπ.)", - "output-node-name-hint": "Το όνομα κόμβου αντιστοιχεί στον τύπο σχέσης για την προώθηση μηνυμάτων σε άλλους κόμβους.", + "period-value-key-required": "Το κλειδί τιμής περιόδου είναι υποχρεωτικό.", + "general-pattern-hint": "Χρησιμοποιήστε ${metadataKey} για τιμή από μεταδεδομένα, $[messageKey] για τιμή από το σώμα του μηνύματος.", + "alarm-severity-pattern-hint": "Χρησιμοποιήστε ${metadataKey} για τιμή από μεταδεδομένα, $[messageKey] για τιμή από το σώμα του μηνύματος. Η σοβαρότητα του συναγερμού πρέπει να είναι συστημική (CRITICAL, MAJOR κ.λπ.)", + "output-node-name-hint": "Το όνομα του κόμβου κανόνα αντιστοιχεί στον τύπο σχέσης του εξερχόμενου μηνύματος και χρησιμοποιείται για προώθηση μηνυμάτων σε άλλους κόμβους κανόνων στην ίδια αλυσίδα.", "use-server-ts": "Χρήση χρονικής σήμανσης διακομιστή", - "use-server-ts-hint": "Χρησιμοποιεί χρονική σήμανση διακομιστή όταν δεν ορίζεται στα δεδομένα.", - "kv-map-pattern-hint": "Όλα τα πεδία εισόδου υποστηρίζουν template. Χρησιμοποιήστε $[messageKey] ή ${metadataKey}.", - "kv-map-single-pattern-hint": "Το πεδίο εισόδου υποστηρίζει template.", + "use-server-ts-hint": "Χρησιμοποιεί τη χρονική σήμανση του διακομιστή για δεδομένα χρονοσειρών που δεν έχουν ρητή χρονική σήμανση. Χρήσιμο για τη διατήρηση της σωστής σειράς κατά την επεξεργασία μηνυμάτων από πολλαπλές πηγές ή όταν τα μηνύματα φτάνουν εκτός σειράς.", + "kv-map-pattern-hint": "Όλα τα πεδία εισόδου υποστηρίζουν παραμετροποίηση. Χρησιμοποιήστε $[messageKey] για εξαγωγή από το μήνυμα και ${metadataKey} για εξαγωγή από τα μεταδεδομένα.", + "kv-map-single-pattern-hint": "Το πεδίο εισόδου υποστηρίζει παραμετροποίηση. Χρησιμοποιήστε $[messageKey] για εξαγωγή από το μήνυμα και ${metadataKey} για εξαγωγή από τα μεταδεδομένα.", "shared-scope": "Κοινόχρηστο scope", "server-scope": "Scope διακομιστή", "client-scope": "Scope πελάτη", @@ -5266,21 +5291,21 @@ "clear-selected-keys": "Απαλοιφή κλειδιών", "geofence-configuration": "Ρυθμίσεις γεωφράχτη", "coordinate-field-names": "Ονόματα πεδίων συντεταγμένων", - "coordinate-field-hint": "Αναζήτηση πεδίων από μήνυμα ή μεταδεδομένα", + "coordinate-field-hint": "Ο κόμβος κανόνα προσπαθεί να ανακτήσει τα καθορισμένα πεδία από το μήνυμα. Αν δεν υπάρχουν, θα τα αναζητήσει στα μεταδεδομένα.", "presence-monitoring-strategy": "Στρατηγική παρακολούθησης παρουσίας", "presence-monitoring-strategy-on-first-message": "Στο πρώτο μήνυμα", "presence-monitoring-strategy-on-each-message": "Σε κάθε μήνυμα", - "presence-monitoring-strategy-on-first-message-hint": "Αναφέρει 'Inside/Outside' μετά το πρώτο μήνυμα και την ελάχιστη διάρκεια.", - "presence-monitoring-strategy-on-each-message-hint": "Αναφέρει 'Inside/Outside' σε κάθε μήνυμα μετά από αλλαγή παρουσίας.", + "presence-monitoring-strategy-on-first-message-hint": "Αναφέρει την κατάσταση παρουσίας 'Εντός' ή 'Εκτός' στο πρώτο μήνυμα, αφού περάσει η καθορισμένη ελάχιστη διάρκεια από την τελευταία ενημέρωση 'Εισήλθε' ή 'Εξήλθε'.", + "presence-monitoring-strategy-on-each-message-hint": "Αναφέρει την κατάσταση παρουσίας 'Εντός' ή 'Εκτός' σε κάθε μήνυμα μετά την ενημέρωση 'Εισήλθε' ή 'Εξήλθε'.", "fetch-credentials-to": "Ανάκτηση διαπιστευτηρίων σε", - "add-originator-attributes-to": "Προσθήκη ιδιοτήτων αποστολέα σε", - "originator-attributes": "Ιδιότητες αποστολέα", - "fetch-latest-telemetry-with-timestamp": "Ανάκτηση τελευταίας τηλεμετρίας με timestamp", - "fetch-latest-telemetry-with-timestamp-tooltip": "Οι τιμές προστίθενται στα μεταδεδομένα με χρονική σήμανση.", - "tell-failure": "Αναφορά αποτυχίας αν λείπουν ιδιότητες", - "tell-failure-tooltip": "Αν λείπει κάποιο κλειδί, το μήνυμα εξόδου αποτυγχάνει.", - "created-time": "Ώρα δημιουργίας", - "chip-help": "Πατήστε 'Enter' για να ολοκληρώσετε την εισαγωγή {{inputName}}. \nΠατήστε 'Backspace' για να διαγράψετε το {{inputName}}. \nΥποστηρίζονται πολλαπλές τιμές.", + "add-originator-attributes-to": "Προσθήκη χαρακτηριστικών αποστολέα σε", + "originator-attributes": "Χαρακτηριστικά αποστολέα", + "fetch-latest-telemetry-with-timestamp": "Ανάκτηση τελευταίας τηλεμετρίας με χρονική σήμανση", + "fetch-latest-telemetry-with-timestamp-tooltip": "Αν επιλεγεί, οι τελευταίες τιμές τηλεμετρίας θα προστεθούν στα εξερχόμενα μεταδεδομένα με χρονική σήμανση, π.χ.: \"{{latestTsKeyName}}\": \"{\"ts\":1574329385897, \"value\":42}\"", + "tell-failure": "Αναφορά αποτυχίας αν λείπει κάποιο χαρακτηριστικό", + "tell-failure-tooltip": "Αν τουλάχιστον ένα από τα επιλεγμένα κλειδιά δεν υπάρχει, το εξερχόμενο μήνυμα θα αναφέρει \"Αποτυχία\".", + "created-time": "Χρόνος δημιουργίας", + "chip-help": "Πατήστε 'Enter' για να ολοκληρώσετε την εισαγωγή του {{inputName}}. \nΠατήστε 'Backspace' για διαγραφή του {{inputName}}. \nΥποστηρίζονται πολλαπλές τιμές.", "detail": "λεπτομέρεια", "field-name": "όνομα πεδίου", "device-profile": "προφίλ συσκευής", @@ -5295,15 +5320,15 @@ "add-mapped-originator-fields-to": "Προσθήκη χαρτογραφημένων πεδίων αποστολέα σε", "fields": "Πεδία", "skip-empty-fields": "Παράλειψη κενών πεδίων", - "skip-empty-fields-tooltip": "Τα πεδία με κενές τιμές δεν θα προστεθούν στο μήνυμα εξόδου ή τα μεταδεδομένα εξόδου.", + "skip-empty-fields-tooltip": "Πεδία με κενές τιμές δεν θα προστεθούν στο εξερχόμενο μήνυμα ή στα μεταδεδομένα εξόδου.", "fetch-interval": "Διάστημα ανάκτησης", "fetch-strategy": "Στρατηγική ανάκτησης", "fetch-timeseries-from-to": "Ανάκτηση χρονοσειρών από {{startInterval}} {{startIntervalTimeUnit}} πριν έως {{endInterval}} {{endIntervalTimeUnit}} πριν.", - "fetch-timeseries-from-to-invalid": "Μη έγκυρη ανάκτηση χρονοσειρών (\"Η αρχή του διαστήματος\" πρέπει να είναι μικρότερη από \"το τέλος του διαστήματος\").", - "use-metadata-dynamic-interval-tooltip": "Εάν επιλεγεί, ο κόμβος κανόνα θα χρησιμοποιήσει δυναμικά πρότυπα για την έναρξη και λήξη του διαστήματος βάσει μηνύματος και μεταδεδομένων.", - "all-mode-hint": "Αν επιλεγεί 'Όλα', θα ανακτηθεί τηλεμετρία εντός του καθορισμένου διαστήματος με παραμέτρους ερωτήματος.", - "first-mode-hint": "Αν επιλεγεί 'Πρώτο', θα ανακτηθεί η πιο κοντινή τηλεμετρία στην αρχή του διαστήματος.", - "last-mode-hint": "Αν επιλεγεί 'Τελευταίο', θα ανακτηθεί η πιο κοντινή τηλεμετρία στο τέλος του διαστήματος.", + "fetch-timeseries-from-to-invalid": "Μη έγκυρη ανάκτηση χρονοσειρών (\"Έναρξη διαστήματος\" πρέπει να είναι μικρότερη από \"Λήξη διαστήματος\").", + "use-metadata-dynamic-interval-tooltip": "Αν είναι ενεργό, ο κόμβος κανόνα θα χρησιμοποιεί δυναμική έναρξη και λήξη διαστήματος βάσει των προτύπων στο μήνυμα και στα μεταδεδομένα.", + "all-mode-hint": "Αν επιλεγεί η λειτουργία ανάκτησης \"Όλα\", ο κόμβος κανόνα θα ανακτήσει τηλεμετρία από το καθορισμένο διάστημα με παραμετροποιήσιμες παραμέτρους ερωτήματος.", + "first-mode-hint": "Αν επιλεγεί η λειτουργία ανάκτησης \"Πρώτο\", ο κόμβος κανόνα θα ανακτήσει την πλησιέστερη τηλεμετρία προς την έναρξη του διαστήματος.", + "last-mode-hint": "Αν επιλεγεί η λειτουργία ανάκτησης \"Τελευταίο\", ο κόμβος κανόνα θα ανακτήσει την πλησιέστερη τηλεμετρία προς τη λήξη του διαστήματος.", "ascending": "Αύξουσα", "descending": "Φθίνουσα", "min": "Ελάχιστο", @@ -5328,23 +5353,23 @@ "use-system-slack-settings": "Χρήση ρυθμίσεων συστήματος για Slack", "slack-api-token": "Slack API token", "slack-api-token-required": "Απαιτείται Slack API token", - "keys-mapping": "Χαρτογράφηση κλειδιών", + "keys-mapping": "Αντιστοίχιση κλειδιών", "add-key": "Προσθήκη κλειδιού", "recipients": "Παραλήπτες", "message-subject-and-content": "Θέμα και περιεχόμενο μηνύματος", - "template-rules-hint": "Και τα δύο πεδία υποστηρίζουν template. Χρησιμοποιήστε $[messageKey] ή ${metadataKey}.", - "originator-customer-desc": "Χρήση πελάτη αποστολέα ως νέος αποστολέας.", - "originator-tenant-desc": "Χρήση τρέχοντος ενοικιαστή ως νέος αποστολέας.", - "originator-related-entity-desc": "Χρήση σχετικής οντότητας ως νέος αποστολέας βάσει σχέσης.", - "originator-alarm-originator-desc": "Χρήση αποστολέα συναγερμού ως νέος αποστολέας (μόνο αν είναι αποστολέας συναγερμού).", - "originator-entity-by-name-pattern-desc": "Χρήση οντότητας από βάση δεδομένων ως αποστολέας βάσει ονόματος.", - "email-from-template-hint": "Χρησιμοποιήστε $[messageKey] ή ${metadataKey} για τιμές.", - "recipients-block-main-hint": "Διευθύνσεις διαχωρισμένες με κόμμα. Υποστηρίζονται templates.", - "forward-msg-default-rule-chain": "Προώθηση μηνύματος στην προεπιλεγμένη αλυσίδα κανόνων αποστολέα", - "forward-msg-default-rule-chain-tooltip": "Αν δεν υπάρχει προεπιλεγμένη αλυσίδα, χρησιμοποιείται αυτή από τη διαμόρφωση προφίλ.", - "exclude-zero-deltas": "Αποκλεισμός μηδενικών διαφορών από μήνυμα εξόδου", - "exclude-zero-deltas-hint": "Το {{outputValueKey}} προστίθεται μόνο αν η τιμή δεν είναι 0.", - "exclude-zero-deltas-time-difference-hint": "Το {{outputValueKey}} και {{periodValueKey}} προστίθενται μόνο αν η τιμή {{outputValueKey}} δεν είναι 0.", + "template-rules-hint": "Και τα δύο πεδία υποστηρίζουν παραμετροποίηση. Χρησιμοποιήστε $[messageKey] για τιμή από το μήνυμα και ${metadataKey} για τιμή από τα μεταδεδομένα του μηνύματος.", + "originator-customer-desc": "Χρήση πελάτη του αποστολέα του εισερχόμενου μηνύματος ως νέου αποστολέα.", + "originator-tenant-desc": "Χρήση του τρέχοντος ενοικιαστή ως νέου αποστολέα.", + "originator-related-entity-desc": "Χρήση σχετικής οντότητας ως νέου αποστολέα. Η αναζήτηση βασίζεται στον καθορισμένο τύπο σχέσης και κατεύθυνση.", + "originator-alarm-originator-desc": "Χρήση αποστολέα συναγερμού ως νέου αποστολέα. Ισχύει μόνο αν ο αποστολέας του εισερχόμενου μηνύματος είναι οντότητα συναγερμού.", + "originator-entity-by-name-pattern-desc": "Χρήση οντότητας από τη βάση δεδομένων ως νέου αποστολέα. Η αναζήτηση βασίζεται στον τύπο οντότητας και το καθορισμένο πρότυπο ονόματος.", + "email-from-template-hint": "Χρησιμοποιήστε $[messageKey] για εξαγωγή τιμής από το μήνυμα και ${metadataKey} για εξαγωγή από τα μεταδεδομένα.", + "recipients-block-main-hint": "Λίστα διευθύνσεων χωρισμένων με κόμμα. Όλα τα πεδία υποστηρίζουν παραμετροποίηση. Χρησιμοποιήστε $[messageKey] για εξαγωγή από το μήνυμα και ${metadataKey} από τα μεταδεδομένα.", + "forward-msg-default-rule-chain": "Προώθηση μηνύματος στην προεπιλεγμένη αλυσίδα κανόνων του αποστολέα", + "forward-msg-default-rule-chain-tooltip": "Αν είναι ενεργό, το μήνυμα θα προωθηθεί στην προεπιλεγμένη αλυσίδα κανόνων του αποστολέα ή στην καθορισμένη στην παραμετροποίηση, αν δεν έχει οριστεί προεπιλεγμένη στο προφίλ της οντότητας.", + "exclude-zero-deltas": "Αποκλεισμός μηδενικών διαφορών από το εξερχόμενο μήνυμα", + "exclude-zero-deltas-hint": "Αν είναι ενεργό, το κλειδί εξόδου \"{{outputValueKey}}\" θα προστεθεί μόνο αν η τιμή του δεν είναι μηδέν.", + "exclude-zero-deltas-time-difference-hint": "Αν είναι ενεργό, τα κλειδιά εξόδου \"{{outputValueKey}}\" και \"{{periodValueKey}}\" θα προστεθούν μόνο αν η τιμή του \"{{outputValueKey}}\" δεν είναι μηδέν.", "search-direction-from": "Από αποστολέα προς στόχο", "search-direction-to": "Από στόχο προς αποστολέα", "del-relation-direction-from": "Από αποστολέα", @@ -5424,10 +5449,10 @@ "html": "HTML", "dynamic": "Δυναμικό", "use-body-type-template": "Χρήση προτύπου τύπου σώματος", - "plain-text-description": "Απλό, μη μορφοποιημένο κείμενο χωρίς στυλ.", - "html-text-description": "Υποστηρίζει ετικέτες HTML για μορφοποίηση, συνδέσμους και εικόνες.", - "dynamic-text-description": "Υποστηρίζει δυναμική εναλλαγή μεταξύ Plain Text και HTML βάσει προτύπων.", - "after-template-evaluation-hint": "Μετά την αξιολόγηση, αν η τιμή είναι true τότε είναι HTML, αλλιώς Plain text." + "plain-text-description": "Απλό, μη μορφοποιημένο κείμενο χωρίς ειδικό στυλ ή μορφοποίηση.", + "html-text-description": "Επιτρέπει τη χρήση HTML tags για μορφοποίηση, συνδέσμους και εικόνες στο σώμα του μηνύματος.", + "dynamic-text-description": "Επιτρέπει δυναμική χρήση τύπου σώματος είτε σε Απλό Κείμενο είτε σε HTML, βάσει της λειτουργίας παραμετροποίησης.", + "after-template-evaluation-hint": "Μετά την αξιολόγηση του προτύπου, η τιμή θα πρέπει να είναι true για HTML και false για Απλό Κείμενο." }, "ai": { "ai-model": "Μοντέλο AI", @@ -5436,11 +5461,11 @@ "prompt-settings": "Ρυθμίσεις prompt", "prompt-settings-hint": "Το προαιρετικό system prompt ορίζει τον γενικό ρόλο και τους περιορισμούς του AI, ενώ το user prompt καθορίζει το συγκεκριμένο έργο προς εκτέλεση. Και τα δύο πεδία υποστηρίζουν χρήση προτύπων.", "system-prompt": "System prompt", - "system-prompt-max-length": "Το system prompt πρέπει να είναι έως 500000 χαρακτήρες.", + "system-prompt-max-length": "Το system prompt πρέπει να είναι έως 10000 χαρακτήρες.", "system-prompt-blank": "Το system prompt δεν πρέπει να είναι κενό.", "user-prompt": "User prompt", "user-prompt-required": "Απαιτείται user prompt.", - "user-prompt-max-length": "Το user prompt πρέπει να είναι έως 500000 χαρακτήρες.", + "user-prompt-max-length": "Το user prompt πρέπει να είναι έως 10000 χαρακτήρες.", "user-prompt-blank": "Το user prompt δεν πρέπει να είναι κενό.", "response-format": "Μορφή απόκρισης", "response-text": "Κείμενο", @@ -5453,11 +5478,12 @@ "response-json-schema-required": "Απαιτείται JSON Schema", "advanced-settings": "Προχωρημένες ρυθμίσεις", "timeout": "Χρονικό όριο (Timeout)", - "timeout-hint": "Μέγιστος χρόνος αναμονής για απάντηση \nαπό το μοντέλο AI πριν τερματιστεί το αίτημα.", - "timeout-required": "Απαιτείται χρονικό όριο", + "timeout-hint": "Μέγιστος χρόνος αναμονής για απάντηση\nαπό το AI μοντέλο πριν διακοπεί το αίτημα.", + "timeout-required": "Το χρονικό όριο είναι υποχρεωτικό", "timeout-validation": "Πρέπει να είναι από 1 δευτερόλεπτο έως 10 λεπτά.", - "force-acknowledgement": "Εξαναγκασμένη επιβεβαίωση", - "force-acknowledgement-hint": "Αν είναι ενεργοποιημένο, το εισερχόμενο μήνυμα επιβεβαιώνεται άμεσα. Η απάντηση του μοντέλου τοποθετείται στη συνέχεια στην ουρά ως ξεχωριστό νέο μήνυμα." + "force-acknowledgement": "Εξαναγκασμένη επιβεβαίωση (ACK)", + "force-acknowledgement-hint": "Αν είναι ενεργό, το εισερχόμενο μήνυμα επιβεβαιώνεται αμέσως. Η απάντηση του μοντέλου αποστέλλεται ως ξεχωριστό, νέο μήνυμα.", + "ai-resources": "AI πόροι" } }, "timezone": { @@ -5757,11 +5783,11 @@ "rule-engine-exceptions-ttl-days": "Ημέρες TTL εξαιρέσεων Rule Engine", "rule-engine-exceptions-ttl-days-required": "Απαιτούνται ημέρες TTL εξαιρέσεων Rule Engine", "rule-engine-exceptions-ttl-days-range": "Οι ημέρες TTL εξαιρέσεων Rule Engine δεν μπορεί να είναι αρνητικές", - "max-rule-node-executions-per-message": "Μέγιστος αριθμός εκτελέσεων rule node ανά μήνυμα", - "max-rule-node-executions-per-message-required": "Απαιτείται μέγιστος αριθμός εκτελέσεων rule node ανά μήνυμα", - "max-rule-node-executions-per-message-range": "Ο μέγιστος αριθμός εκτελέσεων rule node ανά μήνυμα δεν μπορεί να είναι αρνητικός", + "max-rule-node-executions-per-message": "Μέγιστος αριθμός εκτελέσεων κόμβου κανόνα ανά μήνυμα", + "max-rule-node-executions-per-message-required": "Ο μέγιστος αριθμός εκτελέσεων κόμβου κανόνα ανά μήνυμα είναι υποχρεωτικός.", + "max-rule-node-executions-per-message-range": "Ο μέγιστος αριθμός εκτελέσεων κόμβου κανόνα ανά μήνυμα δεν μπορεί να είναι αρνητικός", "max-emails": "Μέγιστος αριθμός αποσταλμένων emails", - "max-emails-required": "Απαιτείται μέγιστος αριθμός αποσταλμένων emails", + "max-emails-required": "Ο μέγιστος αριθμός αποσταλμένων emails είναι υποχρεωτικός.", "max-emails-range": "Ο μέγιστος αριθμός αποσταλμένων emails δεν μπορεί να είναι αρνητικός", "sms-enabled": "SMS ενεργοποιημένο", "max-sms": "Μέγιστος αριθμός αποσταλμένων SMS", @@ -5981,17 +6007,18 @@ "all": "Όλα" }, "tooltip": { - "trigger": "Ενεργοποίηση", + "trigger": "Ενεργοποιητής", "trigger-point": "Σημείο", "trigger-axis": "Άξονας", "label": "Ετικέτα", "value": "Τιμή", "date": "Ημερομηνία", - "show-date-time-interval": "Εμφάνιση χρονικού διαστήματος", - "show-date-time-interval-hint": "Εμφάνιση χρονικού διαστήματος σύμφωνα με τη συγχώνευση δεδομένων.", + "show-date-time-interval": "Εμφάνιση χρονικού διαστήματος ημερομηνίας", + "show-date-time-interval-hint": "Εμφανίζει το χρονικό διάστημα ημερομηνίας σύμφωνα με την ομαδοποίηση δεδομένων.", "hide-zero-tooltip-values": "Απόκρυψη μηδενικών τιμών", + "show-stack-total": "Εμφάνιση συνολικής τιμής σε λειτουργία στοίβας", "background-color": "Χρώμα φόντου", - "background-blur": "Θόλωση φόντου" + "background-blur": "Θάμπωμα φόντου" }, "unit": { "set-unit-conversion": "Ορισμός μετατροπής μονάδων", @@ -6702,15 +6729,15 @@ "no-widgets-text": "Δεν βρέθηκαν widgets", "management": "Διαχείριση widgets", "editor": "Επεξεργαστής widget", - "confirm-to-exit-editor-html": "Έχετε μη αποθηκευμένες ρυθμίσεις widget.
Είστε σίγουροι ότι θέλετε να φύγετε από αυτή τη σελίδα;", - "widget-type-not-found": "Πρόβλημα κατά τη φόρτωση της διαμόρφωσης του widget.
Πιθανόν ο τύπος widget να έχει αφαιρεθεί.", - "widget-type-load-error": "Το widget δεν φορτώθηκε λόγω των εξής σφαλμάτων:", + "confirm-to-exit-editor-html": "Έχετε αποθηκεύσει ρυθμίσεις widget.
Είστε σίγουροι ότι θέλετε να φύγετε από αυτή τη σελίδα;", + "widget-type-not-found": "Πρόβλημα κατά τη φόρτωση της ρύθμισης του widget.
Πιθανόν ο τύπος\n widget που σχετίζεται να αφαιρέθηκε.", + "widget-type-load-error": "Το widget δεν φόρτωσε λόγω των παρακάτω λαθών:", "remove": "Αφαίρεση widget", "delete": "Διαγραφή widget", "edit": "Επεξεργασία widget", "remove-widget-title": "Είστε σίγουροι ότι θέλετε να αφαιρέσετε το widget '{{widgetTitle}}';", - "remove-widget-text": "Μετά την επιβεβαίωση, το widget και όλα τα σχετικά δεδομένα δεν θα μπορούν να ανακτηθούν.", - "replace-reference-with-widget-copy": "Αντικατάσταση αναφοράς με αντίγραφο widget", + "remove-widget-text": "Μετά την επιβεβαίωση, το widget και όλα τα σχετικά δεδομένα θα γίνουν μη ανακτήσιμα.", + "replace-reference-with-widget-copy": "Αντικατάσταση αναφοράς με αντίγραφο του widget", "timeseries": "Χρονοσειρά", "search-data": "Αναζήτηση δεδομένων", "no-data-found": "Δεν βρέθηκαν δεδομένα", @@ -7062,19 +7089,19 @@ }, "widgets": { "mobile-app-qr-code": { - "configuration-hint": "Η διαμόρφωση εξαρτάται από το widget QR code της εφαρμογής κινητού στις βασικές ρυθμίσεις της πλατφόρμας", - "get-it-on-google-play": "Λήψη από το Google Play", - "download-on-the-app-store": "Λήψη από το App Store" + "configuration-hint": "Η ρύθμιση εξαρτάται από το widget QR κώδικα της εφαρμογής κινητού στις κύριες ρυθμίσεις της πλατφόρμας", + "get-it-on-google-play": "Αποκτήστε το στο Google Play", + "download-on-the-app-store": "Κατεβάστε το στο App Store" }, "action-button": { "behavior": "Συμπεριφορά", "on-click": "Κατά το κλικ", - "on-click-hint": "Ενέργεια που εκτελείται όταν γίνεται κλικ στο κουμπί", - "first-button-click": "Κλικ στο πρώτο κουμπί", - "first-button-click-hint": "Ενέργεια κατά την πίεση του πρώτου κουμπιού.", - "second-button-click": "Κλικ στο δεύτερο κουμπί", - "second-button-click-hint": "Ενέργεια κατά την πίεση του δεύτερου κουμπιού.", - "button-click-hint": "Ενέργεια κατά την πίεση στο widget." + "on-click-hint": "Ενέργεια που ενεργοποιείται όταν πατηθεί το κουμπί", + "first-button-click": "Πρώτο κλικ στο κουμπί", + "first-button-click-hint": "Ενέργεια κατά τη διάρκεια της πίεσης στο πρώτο κουμπί.", + "second-button-click": "Δεύτερο κλικ στο κουμπί", + "second-button-click-hint": "Ενέργεια κατά τη διάρκεια της πίεσης στο δεύτερο κουμπί.", + "button-click-hint": "Ενέργεια κατά τη διάρκεια της πίεσης στο widget." }, "command-button": { "behavior": "Συμπεριφορά", @@ -8138,7 +8165,7 @@ "button-primary": "Πρωτεύον χρώμα", "button-background-color": "Χρώμα φόντου κουμπιού", "button-text-color": "Χρώμα κειμένου κουμπιού", - "widget-title": "Τίτλος γραφικού στοιχείου", + "widget-title": "Τίτλος widget", "button-label": "Ετικέτα κουμπιού", "device-attribute-scope": "Πεδίο χαρακτηριστικού συσκευής", "server-attribute": "Χαρακτηριστικό διακομιστή", @@ -8298,17 +8325,17 @@ "no-datasources": "Δεν έχουν διαμορφωθεί πηγές δεδομένων", "remove-datasource": "Αφαίρεση πηγής δεδομένων", "behavior": "Συμπεριφορά", - "on-click": "Με κλικ", - "on-click-hint": "Ενέργεια που εκτελείται όταν ο χρήστης κάνει κλικ στο στοιχείο του χάρτη.", + "on-click": "Κατά το κλικ", + "on-click-hint": "Ενέργεια που ενεργοποιείται όταν ο χρήστης κάνει κλικ στο στοιχείο του χάρτη.", "groups": "Ομάδες", - "groups-hint": "Λίστα ονομάτων ομάδων που έχουν εκχωρηθεί στην επικάλυψη, χρησιμοποιείται για την εναλλαγή της ορατότητάς της στον χάρτη.", + "groups-hint": "Λίστα με τα ονόματα ομάδων που ανατίθενται στο επικαλυπτόμενο στοιχείο, χρησιμοποιούνται για την εναλλαγή της ορατότητάς του στον χάρτη.", "color": "Χρώμα", "color-settings": "Ρυθμίσεις χρώματος", "color-type-constant": "Σταθερό", "color-type-range": "Εύρος", "color-type-function": "Συνάρτηση", "color-range-source-key": "Κλειδί πηγής εύρους χρώματος", - "color-range-source-key-required": "Απαιτείται κλειδί πηγής εύρους χρώματος", + "color-range-source-key-required": "Το κλειδί πηγής εύρους χρώματος είναι υποχρεωτικό", "color-range": "Εύρος χρώματος", "color-function": "Συνάρτηση χρώματος", "label": "Ετικέτα", @@ -8795,7 +8822,7 @@ "tank": "Δοχείο", "shape": "Σχήμα", "datasource-units": "Μονάδες πηγής", - "widget-units": "Μονάδες γραφικού στοιχείου", + "widget-units": "Μονάδες widget", "decimals": "Δεκαδικά", "liquid": "Υγρό", "liquid-color": "Χρώμα υγρού", @@ -8880,9 +8907,9 @@ "progress-bar-card-style": "Στυλ κάρτας γραμμής προόδου" }, "notification": { - "max-notification-display": "Μέγιστος αριθμός ειδοποιήσεων για εμφάνιση", + "max-notification-display": "Μέγιστος αριθμός ειδοποιήσεων προς εμφάνιση", "counter": "Μετρητής", - "counter-hint": "Ο μετρητής θα εμφανίζεται εάν είναι ενεργοποιημένος ο \"Τίτλος γραφικού στοιχείου\"", + "counter-hint": "Ο μετρητής θα εμφανιστεί αν είναι ενεργοποιημένος ο «Τίτλος widget»", "icon": "Εικονίδιο", "counter-value": "Τιμή", "counter-color": "Χρώμα", @@ -8890,10 +8917,10 @@ "button-view-all": "Προβολή όλων", "button-filter": "Φίλτρο", "type-filter": "Φίλτρο τύπου", - "button-mark-read": "Σήμανση όλων ως αναγνωσμένων", + "button-mark-read": "Επισήμανση όλων ως αναγνωσμένων", "notification-types": "Τύποι ειδοποιήσεων", "notification-type": "Τύπος ειδοποίησης", - "search-type": "Τύπος αναζήτησης", + "search-type": "Αναζήτηση τύπου", "any-type": "Οποιοσδήποτε τύπος" }, "alarm-count": { @@ -9290,15 +9317,15 @@ "no-data-available": "Δεν υπάρχουν διαθέσιμα δεδομένα" }, "system-info": { - "cpu": "Επεξεργαστής", + "cpu": "CPU", "ram": "RAM", "disk": "Δίσκος", - "cpu-warning-text": "Υψηλή χρήση επεξεργαστή. Βελτιστοποιήστε την απόδοση του συστήματος για να αποφύγετε αποτυχία.", - "cpu-critical-text": "Κρίσιμα υψηλή χρήση επεξεργαστή. Βελτιστοποιήστε την απόδοση του συστήματος για να αποφύγετε αποτυχία.", - "ram-warning-text": "Χαμηλή διαθεσιμότητα RAM. Βελτιστοποιήστε ή αυξήστε τη RAM για να αποφύγετε αποτυχία.", - "ram-critical-text": "Κρίσιμα χαμηλή RAM. Βελτιστοποιήστε ή αυξήστε τη RAM για να αποφύγετε αποτυχία.", - "disk-warning-text": "Χαμηλός διαθέσιμος χώρος δίσκου. Απελευθερώστε ή αυξήστε τον αποθηκευτικό χώρο.", - "disk-critical-text": "Κρίσιμα χαμηλός χώρος δίσκου. Απελευθερώστε ή αυξήστε τον αποθηκευτικό χώρο." + "cpu-warning-text": "Η χρήση του CPU είναι υψηλή. Για να αποφύγετε αποτυχία του συστήματος, βελτιστοποιήστε την απόδοση του συστήματος.", + "cpu-critical-text": "Κρίσιμα υψηλή χρήση CPU. Για να αποφύγετε αποτυχία του συστήματος, βελτιστοποιήστε την απόδοση του συστήματος.", + "ram-warning-text": "Η μνήμη RAM είναι χαμηλή. Για να αποφύγετε αποτυχία του συστήματος, βελτιστοποιήστε την απόδοση του συστήματος ή αυξήστε το μέγεθος της μνήμης RAM.", + "ram-critical-text": "Κρίσιμα χαμηλή μνήμη RAM. Για να αποφύγετε αποτυχία του συστήματος, βελτιστοποιήστε την απόδοση του συστήματος ή αυξήστε το μέγεθος της μνήμης RAM.", + "disk-warning-text": "Ο χώρος στον δίσκο είναι χαμηλός. Για να αποφύγετε την απώλεια δεδομένων, ελευθερώστε ή επεκτείνετε τον χώρο στον δίσκο.", + "disk-critical-text": "Κρίσιμα χαμηλός χώρος στον δίσκο. Για να αποφύγετε την απώλεια δεδομένων, ελευθερώστε ή επεκτείνετε τον χώρο στον δίσκο." }, "cluster-info": { "service-id": "Αναγνωριστικό υπηρεσίας", @@ -9522,4 +9549,4 @@ "language": { "language": "Γλώσσα" } -} +} \ No newline at end of file diff --git a/ui-ngx/src/assets/locale/locale.constant-fr_FR.json b/ui-ngx/src/assets/locale/locale.constant-fr_FR.json index e278f5f8a9..91cd95bd41 100644 --- a/ui-ngx/src/assets/locale/locale.constant-fr_FR.json +++ b/ui-ngx/src/assets/locale/locale.constant-fr_FR.json @@ -684,7 +684,7 @@ "filter-type-entity-name": "Nom de l'entité", "filter-type-entity-type": "Type d'entité", "filter-type-state-entity": "Entité de l'état du tableau de bord", - "filter-type-state-entity-description": "Entité extraite des paramètres de l'état du tableau de bord", + "filter-type-state-entity-description": "Entité prise à partir des paramètres de l'état du tableau de bord", "filter-type-asset-type": "Type d'actif", "filter-type-asset-type-description": "Actifs de type '{{assetTypes}}'", "filter-type-asset-type-and-name-description": "Actifs de type '{{assetTypes}}' dont le nom commence par '{{prefix}}'", @@ -715,18 +715,18 @@ "filter-type-required": "Le type de filtre est requis.", "entity-filter-no-entity-matched": "Aucune entité ne correspond au filtre spécifié.", "no-entity-filter-specified": "Aucun filtre d'entité spécifié", - "root-state-entity": "Utiliser l'entité de l'état du tableau de bord comme racine", - "last-level-relation": "Ne récupérer que le dernier niveau de relation", + "root-state-entity": "Utiliser l'entité d'état du tableau de bord comme racine", + "last-level-relation": "Extraire uniquement la relation de dernier niveau", "root-entity": "Entité racine", "state-entity-parameter-name": "Nom du paramètre d'entité d'état", "default-state-entity": "Entité d'état par défaut", "default-entity-parameter-name": "Par défaut", "query-options": "Options de requête", - "max-relation-level": "Niveau de relation maximal", + "max-relation-level": "Niveau maximal de relation", "unlimited-level": "Niveau illimité", "state-entity": "Entité d'état du tableau de bord", "all-entities": "Toutes les entités", - "any-relation": "n'importe quelle" + "any-relation": "n'importe laquelle" }, "asset": { "asset": "Actif", @@ -861,23 +861,23 @@ } }, "api-usage": { - "api-features": "Fonctionnalités de l'API", + "api-features": "Fonctionnalités API", "api-usage": "Utilisation de l'API", "alarm": "Alarme", "alarms-created": "Alarmes créées", - "queue-stats": "Statistiques de file", - "processing-failures-and-timeouts": "Échecs de traitement et expirations", + "queue-stats": "Statistiques de file d'attente", + "processing-failures-and-timeouts": "Échecs et expirations de traitement", "exceptions": "Exceptions", "alarms-created-daily-activity": "Activité quotidienne des alarmes créées", "alarms-created-hourly-activity": "Activité horaire des alarmes créées", "alarms-created-monthly-activity": "Activité mensuelle des alarmes créées", "data-points": "Points de données", - "data-points-storage-days": "Durée de stockage des points de données (jours)", + "data-points-storage-days": "Durée de conservation des points de données (jours)", "device-api": "API des appareils", - "email": "Email", - "email-messages": "Messages email", - "email-messages-daily-activity": "Activité quotidienne des emails", - "email-messages-monthly-activity": "Activité mensuelle des emails", + "email": "E-mail", + "email-messages": "Messages e-mail", + "email-messages-daily-activity": "Activité quotidienne des e-mails", + "email-messages-monthly-activity": "Activité mensuelle des e-mails", "executions": "Exécutions", "scripts": "Scripts", "scripts-hourly-activity": "Activité horaire des scripts", @@ -890,12 +890,12 @@ "latest-error": "Dernière erreur", "messages": "Messages", "notifications": "Notifications", - "notifications-email-sms": "Notifications (Email/SMS)", + "notifications-email-sms": "Notifications (E-mail/SMS)", "notifications-hourly-activity": "Activité horaire des notifications", - "permanent-failures": "Échecs permanents de ${entityName}", - "permanent-timeouts": "Expirations permanentes de ${entityName}", - "processing-failures": "Échecs de traitement de ${entityName}", - "processing-timeouts": "Expirations de traitement de ${entityName}", + "permanent-failures": "Échecs permanents ${entityName}", + "permanent-timeouts": "Expirations permanentes ${entityName}", + "processing-failures": "Échecs de traitement ${entityName}", + "processing-timeouts": "Expirations de traitement ${entityName}", "rule-chain": "Chaîne de règles", "rule-engine": "Moteur de règles", "rule-engine-daily-activity": "Activité quotidienne du moteur de règles", @@ -924,14 +924,14 @@ "view-statistics": "Voir les statistiques" }, "api-limit": { - "cassandra-write-queries-core": "Requêtes d'écriture Cassandra via l'API REST", - "cassandra-read-queries-core": "Requêtes de lecture Cassandra via l'API REST et WS (télémétrie)", - "cassandra-write-queries-rule-engine": "Requêtes d'écriture Cassandra du moteur de règles (télémétrie)", - "cassandra-read-queries-rule-engine": "Requêtes de lecture Cassandra du moteur de règles (télémétrie)", - "cassandra-write-queries-monolith": "Requêtes d'écriture Cassandra monolithiques (télémétrie)", - "cassandra-read-queries-monolith": "Requêtes de lecture Cassandra monolithiques (télémétrie)", - "entity-version-creation": "Création de version d'entité", - "entity-version-load": "Chargement de version d'entité", + "cassandra-write-queries-core": "Requêtes d’écriture Cassandra via l’API REST", + "cassandra-read-queries-core": "Requêtes de lecture Cassandra pour la télémétrie via REST API et WebSocket", + "cassandra-write-queries-rule-engine": "Requêtes d’écriture Cassandra pour la télémétrie du moteur de règles", + "cassandra-read-queries-rule-engine": "Requêtes de lecture Cassandra pour la télémétrie du moteur de règles", + "cassandra-write-queries-monolith": "Requêtes d’écriture Cassandra pour la télémétrie du monolithe", + "cassandra-read-queries-monolith": "Requêtes de lecture Cassandra pour la télémétrie du monolithe", + "entity-version-creation": "Création de version d’entité", + "entity-version-load": "Chargement de version d’entité", "notification-requests": "Requêtes de notification", "notification-requests-per-rule": "Requêtes de notification par règle", "rest-api-requests": "Requêtes API REST", @@ -942,9 +942,9 @@ "transport-messages-per-gateway-device": "Messages de transport par appareil de passerelle", "ws-updates-per-session": "Mises à jour WS par session", "edge-events": "Événements Edge", - "edge-events-per-edge": "Événements Edge par instance Edge", + "edge-events-per-edge": "Événements Edge par instance", "edge-uplink-messages": "Messages montants Edge", - "edge-uplink-messages-per-edge": "Messages montants Edge par instance Edge" + "edge-uplink-messages-per-edge": "Messages montants Edge par instance" }, "audit-log": { "audit": "Audit", @@ -966,7 +966,7 @@ "type-assigned-to-customer": "Assigné à un client", "type-unassigned-from-customer": "Désassigné d'un client", "type-assigned-to-edge": "Assigné à une Edge", - "type-unassigned-from-edge": "Désassigné d'une Edge", + "type-unassigned-from-edge": "Désassigné d'un Edge", "type-activated": "Activé", "type-suspended": "Suspendu", "type-credentials-read": "Identifiants lus", @@ -1008,9 +1008,9 @@ "failures": "Échecs", "entity": "entité", "hint": { - "main-limited": "Pas plus de {{msg}} messages de débogage pour {{entity}} toutes les {{time}} seront enregistrés.", - "on-failure": "Journaliser uniquement les messages d'erreur.", - "all-messages": "Journaliser tous les messages de débogage." + "main-limited": "Pas plus de {{msg}} messages de débogage de {{entity}} par {{time}} ne seront enregistrés.", + "on-failure": "Enregistrer uniquement les messages d'erreur.", + "all-messages": "Enregistrer tous les messages de débogage." } }, "calculated-fields": { @@ -1030,79 +1030,79 @@ "add-argument": "Ajouter un argument", "test-script-function": "Tester la fonction script", "no-arguments": "Aucun argument configuré", - "argument-settings": "Paramètres des arguments", + "argument-settings": "Paramètres de l'argument", "argument-current": "Entité actuelle", - "argument-current-tenant": "Locataire actuel", + "argument-current-tenant": "Tenant actuel", "argument-device": "Appareil", "argument-asset": "Actif", "argument-customer": "Client", - "argument-tenant": "Locataire actuel", + "argument-tenant": "Tenant actuel", "argument-type": "Type d'argument", "see-debug-events": "Voir les événements de débogage", "attribute": "Attribut", "copy-argument-name": "Copier le nom de l'argument", "timeseries-key": "Clé de série temporelle", - "device-name": "Nom de l'appareil", + "device-name": "Nom de l’appareil", "latest-telemetry": "Dernière télémétrie", - "rolling": "Rolling des séries temporelles", - "attribute-scope": "Portée de l'attribut", + "rolling": "Déroulement des séries temporelles", + "attribute-scope": "Portée de l’attribut", "server-attributes": "Attributs serveur", "client-attributes": "Attributs client", "shared-attributes": "Attributs partagés", "attribute-key": "Clé d'attribut", "default-value": "Valeur par défaut", - "limit": "Valeurs max", + "limit": "Valeurs max.", "time-window": "Fenêtre temporelle", "customer-name": "Nom du client", - "asset-name": "Nom de l'actif", + "asset-name": "Nom de l’actif", "timeseries": "Séries temporelles", - "output": "Résultat", + "output": "Sortie", "create": "Créer un nouveau champ calculé", "file": "Fichier de champ calculé", - "invalid-file-error": "Format de fichier invalide. Veuillez vérifier que le fichier est bien un fichier JSON valide.", + "invalid-file-error": "Format de fichier invalide. Veuillez vous assurer que le fichier est un JSON valide.", "import": "Importer un champ calculé", "export": "Exporter un champ calculé", "export-failed-error": "Impossible d'exporter le champ calculé : {{error}}", - "output-type": "Type de résultat", - "delete-title": "Êtes-vous sûr de vouloir supprimer le champ calculé '{{title}}' ?", - "delete-text": "Attention, après confirmation le champ calculé et toutes les données associées seront irrécupérables.", - "delete-multiple-title": "Êtes-vous sûr de vouloir supprimer { count, plural, =1 {1 champ calculé} other {# champs calculés} } ?", - "delete-multiple-text": "Attention, après confirmation tous les champs calculés sélectionnés seront supprimés et toutes les données associées seront irrécupérables.", + "output-type": "Type de sortie", + "delete-title": "Voulez-vous vraiment supprimer le champ calculé '{{title}}' ?", + "delete-text": "Attention, après confirmation, le champ calculé et toutes les données associées seront irrécupérables.", + "delete-multiple-title": "Voulez-vous vraiment supprimer { count, plural, =1 {1 champ calculé} other {# champs calculés} } ?", + "delete-multiple-text": "Attention, après confirmation, tous les champs calculés sélectionnés seront supprimés et les données associées seront irrécupérables.", "test-with-this-message": "Tester avec ce message", - "use-latest-timestamp": "Utiliser l'horodatage le plus récent", + "use-latest-timestamp": "Utiliser le dernier horodatage", "hint": { - "arguments-simple-with-rolling": "Un champ calculé de type simple ne doit pas contenir de clés avec type de séries temporelles roulantes.", + "arguments-simple-with-rolling": "Un champ calculé de type simple ne doit pas contenir de clés avec déroulement de séries temporelles.", "arguments-empty": "Les arguments ne doivent pas être vides.", - "expression-required": "Une expression est requise.", - "expression-invalid": "L'expression est invalide", + "expression-required": "L'expression est requise.", + "expression-invalid": "L'expression est invalide.", "expression-max-length": "La longueur de l'expression doit être inférieure à 255 caractères.", "argument-name-required": "Le nom de l'argument est requis.", "argument-name-pattern": "Le nom de l'argument est invalide.", - "argument-name-duplicate": "Un argument portant ce nom existe déjà.", - "argument-name-max-length": "Le nom de l'argument doit comporter moins de 256 caractères.", + "argument-name-duplicate": "Un argument avec ce nom existe déjà.", + "argument-name-max-length": "Le nom de l'argument doit contenir moins de 256 caractères.", "argument-name-forbidden": "Ce nom d'argument est réservé et ne peut pas être utilisé.", "argument-type-required": "Le type d'argument est requis.", "max-args": "Nombre maximal d'arguments atteint.", - "decimals-range": "Les décimales par défaut doivent être un nombre entre 0 et 15.", + "decimals-range": "Le nombre de décimales par défaut doit être compris entre 0 et 15.", "expression": "L'expression par défaut montre comment convertir une température de Fahrenheit en Celsius.", - "arguments-entity-not-found": "Entité cible de l'argument introuvable.", - "use-latest-timestamp": "Si activé, la valeur calculée sera enregistrée avec l'horodatage le plus récent des télémétries des arguments, au lieu de l'heure du serveur." + "arguments-entity-not-found": "L'entité cible de l'argument est introuvable.", + "use-latest-timestamp": "Si activé, la valeur calculée sera enregistrée avec l’horodatage le plus récent parmi la télémétrie des arguments, au lieu de celui du serveur." } }, "ai-models": { - "ai-models": "Modèles IA", - "ai-model": "Modèle IA", + "ai-models": "Modèles d'IA", + "ai-model": "Modèle d'IA", "model": "Modèle", "name": "Nom", - "ai-provider": "Fournisseur IA", - "no-found": "Aucun modèle IA trouvé", + "ai-provider": "Fournisseur d'IA", + "no-found": "Aucun modèle d'IA trouvé", "list": "{ count, plural, =1 {Un modèle} other {Liste de # modèles} }", "selected-fields": "{ count, plural, =1 {1 modèle} other {# modèles} } sélectionné(s)", "add": "Ajouter un modèle", - "delete-model-title": "Êtes-vous sûr de vouloir supprimer le modèle '{{modelName}}' ?", + "delete-model-title": "Voulez-vous vraiment supprimer le modèle '{{modelName}}' ?", "delete-model-text": "Attention, après confirmation, le modèle et toutes les données associées seront irrécupérables.", - "delete-models-title": "Êtes-vous sûr de vouloir supprimer { count, plural, =1 {1 modèle} other {# modèles} } ?", - "delete-models-text": "Attention, après confirmation, tous les modèles sélectionnés seront supprimés et toutes les données associées deviendront irrécupérables.", + "delete-models-title": "Voulez-vous vraiment supprimer { count, plural, =1 {1 modèle} other {# modèles} } ?", + "delete-models-text": "Attention, après confirmation, tous les modèles sélectionnés seront supprimés et toutes les données associées seront irrécupérables.", "ai-providers": { "openai": "OpenAI", "azure-openai": "Azure OpenAI", @@ -1111,64 +1111,83 @@ "mistral-ai": "Mistral AI", "anthropic": "Anthropic", "amazon-bedrock": "Amazon Bedrock", - "github-models": "Modèles GitHub" + "github-models": "GitHub Models", + "ollama": "Ollama" }, "name-required": "Le nom est requis.", - "name-max-length": "Le nom doit comporter 255 caractères ou moins.", + "name-max-length": "Le nom doit contenir 255 caractères ou moins.", "provider": "Fournisseur", "api-key": "Clé API", "api-key-required": "La clé API est requise.", - "project-id": "ID de projet", - "project-id-required": "L'ID de projet est requis.", + "api-key-open-ai-required": "La clé API est requise lors de l'utilisation de l'API officielle d'OpenAI.", + "project-id": "ID du projet", + "project-id-required": "L'ID du projet est requis", "location": "Emplacement", - "location-required": "L'emplacement est requis.", + "location-required": "L’emplacement est requis.", "service-account-key-file": "Fichier de clé du compte de service", "service-account-key-file-required": "Le fichier de clé du compte de service est requis.", "no-file": "Aucun fichier sélectionné.", "drop-file": "Déposez un fichier ou cliquez pour en sélectionner un à téléverser.", - "personal-access-token": "Jeton d'accès personnel", - "personal-access-token-required": "Le jeton d'accès personnel est requis.", + "personal-access-token": "Jeton d’accès personnel", + "personal-access-token-required": "Le jeton d’accès personnel est requis.", "configuration": "Configuration", "model-id": "ID du modèle", - "model-id-required": "L'ID du modèle est requis.", + "model-id-required": "L’ID du modèle est requis.", "deployment-name": "Nom du déploiement", - "deployment-name-required": "Le nom du déploiement est requis.", + "deployment-name-required": "Le nom du déploiement est requis", "set": "Définir", "region": "Région", "region-required": "La région est requise.", "access-key-id": "ID de la clé d'accès", - "access-key-id-required": "L'ID de la clé d'accès est requis.", - "secret-access-key": "Clé d'accès secrète", - "secret-access-key-required": "La clé d'accès secrète est requise.", + "access-key-id-required": "L’ID de la clé d’accès est requis.", + "secret-access-key": "Clé d’accès secrète", + "secret-access-key-required": "La clé d’accès secrète est requise.", "temperature": "Température", - "temperature-hint": "Ajuste le niveau d'aléatoire dans la sortie du modèle. Des valeurs plus élevées augmentent l'aléatoire, tandis que des valeurs plus faibles la réduisent.", + "temperature-hint": "Ajuste le niveau d’aléa dans la sortie du modèle. Une valeur élevée augmente l’aléa, tandis qu’une valeur faible le réduit.", "temperature-min": "Doit être supérieur ou égal à 0.", "top-p": "Top P", - "top-p-hint": "Crée un ensemble des jetons les plus probables pour que le modèle puisse choisir. Des valeurs plus élevées créent un ensemble plus large et diversifié, tandis que des valeurs plus faibles le réduisent.", + "top-p-hint": "Crée un ensemble de tokens les plus probables pour la sélection du modèle. Une valeur élevée élargit le choix, une valeur faible le restreint.", "top-p-min-max": "Doit être supérieur à 0 et inférieur ou égal à 1.", "top-k": "Top K", - "top-k-hint": "Limite les choix du modèle à un ensemble fixe des \"K\" jetons les plus probables.", + "top-k-hint": "Limite le choix du modèle à un ensemble fixe des K tokens les plus probables.", "top-k-min": "Doit être supérieur ou égal à 0.", "presence-penalty": "Pénalité de présence", - "presence-penalty-hint": "Applique une pénalité fixe à la probabilité d’un jeton s’il est déjà apparu dans le texte.", + "presence-penalty-hint": "Applique une pénalité fixe à la probabilité d’un token s’il est déjà apparu dans le texte.", "frequency-penalty": "Pénalité de fréquence", - "frequency-penalty-hint": "Applique une pénalité à la probabilité d’un jeton qui augmente avec sa fréquence dans le texte.", - "max-output-tokens": "Nombre maximum de jetons en sortie", - "max-output-tokens-min": "Doit être supérieur à 0.", - "max-output-tokens-hint": "Définit le nombre maximal de jetons que le modèle peut générer en une seule réponse.", + "frequency-penalty-hint": "Applique une pénalité à la probabilité d’un token selon sa fréquence dans le texte.", + "max-output-tokens": "Nombre maximal de tokens en sortie", + "max-output-tokens-hint": "Définit le nombre maximal de tokens que \nle modèle peut générer dans une réponse unique.", + "context-length": "Longueur du contexte", + "context-length-hint": "Définit la taille de la fenêtre de contexte en tokens. Cela inclut l'entrée utilisateur et la réponse générée.", "endpoint": "Point de terminaison", "endpoint-required": "Le point de terminaison est requis.", + "baseurl": "URL de base", + "baseurl-required": "L’URL de base est requise.", "service-version": "Version du service", "check-connectivity": "Vérifier la connectivité", "check-connectivity-success": "La requête de test a réussi", "check-connectivity-failed": "La requête de test a échoué", - "no-model-matching": "Aucun modèle correspondant à '{{entity}}' trouvé.", + "no-model-matching": "Aucun modèle correspondant à '{{entity}}' n’a été trouvé.", "model-required": "Le modèle est requis.", - "no-model-text": "Aucun modèle trouvé." + "no-model-text": "Aucun modèle trouvé.", + "authentication": "Authentification", + "authentication-basic-hint": "Utilise l’authentification HTTP Basic standard. Le nom d’utilisateur et le mot de passe seront combinés, encodés en Base64 et envoyés dans l’en-tête \"Authorization\" de chaque requête vers le serveur Ollama.", + "authentication-token-hint": "Utilise l’authentification par jeton Bearer. Le jeton fourni sera directement envoyé dans l’en-tête \"Authorization\" de chaque requête vers le serveur Ollama.", + "authentication-type": { + "none": "Aucune", + "basic": "Basic", + "token": "Jeton" + }, + "username": "Nom d’utilisateur", + "username-required": "Le nom d’utilisateur est requis.", + "password": "Mot de passe", + "password-required": "Le mot de passe est requis.", + "token": "Jeton", + "token-required": "Le jeton est requis." }, "confirm-on-exit": { - "message": "Vous avez des modifications non enregistrées. Êtes-vous sûr de vouloir quitter cette page ?", - "html-message": "Vous avez des modifications non enregistrées.
Êtes-vous sûr de vouloir quitter cette page ?", + "message": "Des modifications non enregistrées existent. Voulez-vous vraiment quitter cette page ?", + "html-message": "Des modifications non enregistrées existent.
Voulez-vous vraiment quitter cette page ?", "title": "Modifications non enregistrées" }, "contact": { @@ -1321,21 +1340,21 @@ "dashboard": "Tableau de bord", "dashboards": "Tableaux de bord", "management": "Gestion des tableaux de bord", - "view-dashboards": "Voir les tableaux de bord", + "view-dashboards": "Afficher les tableaux de bord", "add": "Ajouter un tableau de bord", "assign-dashboard-to-customer": "Assigner le(s) tableau(x) de bord au client", "assign-dashboard-to-customer-text": "Veuillez sélectionner les tableaux de bord à assigner au client", - "assign-to-customer-text": "Veuillez sélectionner le client à qui assigner le(s) tableau(x) de bord", + "assign-to-customer-text": "Veuillez sélectionner le client auquel assigner le(s) tableau(x) de bord", "assign-to-customer": "Assigner au client", "unassign-from-customer": "Désassigner du client", - "make-public": "Rendre public le tableau de bord", - "make-private": "Rendre privé le tableau de bord", + "make-public": "Rendre le tableau de bord public", + "make-private": "Rendre le tableau de bord privé", "manage-assigned-customers": "Gérer les clients assignés", "assigned-customers": "Clients assignés", "assign-to-customers": "Assigner le(s) tableau(x) de bord aux clients", "assign-to-customers-text": "Veuillez sélectionner les clients à qui assigner le(s) tableau(x) de bord", "unassign-from-customers": "Désassigner le(s) tableau(x) de bord des clients", - "unassign-from-customers-text": "Veuillez sélectionner les clients à désassigner du tableau(x) de bord", + "unassign-from-customers-text": "Veuillez sélectionner les clients à désassigner du/des tableau(x) de bord", "no-dashboards-text": "Aucun tableau de bord trouvé", "no-widgets": "Aucun widget configuré", "add-widget": "Ajouter un nouveau widget", @@ -1574,24 +1593,24 @@ "maximum-function-types": "Maximum { count, plural, =1 {1 type de fonction autorisé.} other {# types de fonctions autorisés} }", "time-description": "horodatage de la valeur actuelle ;", "value-description": "la valeur actuelle ;", - "prev-value-description": "résultat de l'appel précédent de la fonction ;", + "prev-value-description": "résultat de l'appel de fonction précédent ;", "time-prev-description": "horodatage de la valeur précédente ;", - "prev-orig-value-description": "valeur d'origine précédente ;", + "prev-orig-value-description": "valeur précédente d'origine ;", "aggregation": "Agrégation", - "aggregation-type-hint-common": "Pour des raisons de performance, le calcul des valeurs agrégées est disponible uniquement pour des intervalles de temps fixes comme « jour actuel », « mois actuel », etc., et n'est pas disponible pour des fenêtres glissantes comme « 30 dernières minutes » ou « dernières 24 heures ».", + "aggregation-type-hint-common": "Pour des raisons de performance, le calcul des valeurs agrégées est disponible uniquement pour des intervalles temporels fixes comme \"jour en cours\", \"mois en cours\", etc., et n'est pas disponible pour des fenêtres glissantes comme '30 dernières minutes' ou '24 dernières heures'.", "aggregation-type-none-hint": "Prendre la dernière valeur.", - "aggregation-type-min-hint": "Trouver la valeur minimale parmi les points de données dans la fenêtre temporelle sélectionnée.", - "aggregation-type-max-hint": "Trouver la valeur maximale parmi les points de données dans la fenêtre temporelle sélectionnée.", - "aggregation-type-avg-hint": "Calculer la moyenne des valeurs dans la fenêtre temporelle sélectionnée.", - "aggregation-type-sum-hint": "Additionner toutes les valeurs dans la fenêtre temporelle sélectionnée.", - "aggregation-type-count-hint": "Nombre total de points de données dans la fenêtre temporelle sélectionnée.", + "aggregation-type-min-hint": "Trouver la valeur minimale parmi les points de données dans une fenêtre temporelle sélectionnée.", + "aggregation-type-max-hint": "Trouver la valeur maximale parmi les points de données dans une fenêtre temporelle sélectionnée.", + "aggregation-type-avg-hint": "Calculer la valeur moyenne parmi les points de données dans une fenêtre temporelle sélectionnée.", + "aggregation-type-sum-hint": "Additionner toutes les valeurs des points de données dans une fenêtre temporelle sélectionnée.", + "aggregation-type-count-hint": "Nombre total de points de données dans une fenêtre temporelle sélectionnée.", "delta-calculation": "Calcul du delta", "enable-delta-calculation": "Activer le calcul du delta", - "enable-delta-calculation-hint": "Lorsqu'il est activé, la valeur de la clé de données est calculée sur la base des valeurs agrégées pour une fenêtre temporelle sélectionnée et une période de comparaison spécifiée. Pour des raisons de performance, le calcul du delta est disponible uniquement pour des fenêtres temporelles historiques et non pour des valeurs en temps réel. Par exemple, vous pouvez calculer le delta entre la consommation d'énergie d'hier et celle de l'avant-hier.", + "enable-delta-calculation-hint": "Lorsqu'activé, la valeur de la clé de données est calculée à partir des valeurs agrégées pour une fenêtre temporelle sélectionnée et une période de comparaison définie. Pour des raisons de performance, le calcul du delta est disponible uniquement pour les fenêtres historiques, et non pour les valeurs en temps réel. Par exemple, vous pouvez calculer le delta entre la consommation énergétique d'hier et celle de l'avant-veille.", "delta-calculation-result": "Résultat du calcul du delta", "delta-calculation-result-previous-value": "Valeur précédente", "delta-calculation-result-delta-absolute": "Delta (absolu)", - "delta-calculation-result-delta-percent": "Delta (pourcentage)", + "delta-calculation-result-delta-percent": "Delta (en pourcentage)", "source": "Source", "latest": "Dernier", "latest-value": "Dernière valeur", @@ -1698,30 +1717,30 @@ "lwm2m-security-config": { "identity": "Identité du client", "identity-required": "L'identité du client est requise.", - "identity-tooltip": "L'identifiant PSK est un identifiant arbitraire pouvant aller jusqu'à 128 octets, tel que décrit dans la norme [RFC7925].\nL'identifiant PSK DOIT d'abord être converti en chaîne de caractères puis encodé en octets à l'aide de l'encodage UTF-8.", + "identity-tooltip": "L'identifiant PSK est un identifiant PSK arbitraire jusqu'à 128 octets, comme décrit dans la norme [RFC7925].\nL'identifiant PSK DOIT d'abord être converti en chaîne de caractères, puis encodé en octets en utilisant UTF-8.", "client-key": "Clé du client", "client-key-required": "La clé du client est requise.", - "client-key-tooltip-prk": "La clé publique RPK ou l'identifiant doit être conforme à la norme [RFC7250] et encodée en Base64 !", - "client-key-tooltip-psk": "La clé PSK doit être conforme à la norme [RFC4279] et au format HexDec : 32, 64, 128 caractères !", - "endpoint": "Nom du client Endpoint", - "endpoint-required": "Le nom du client Endpoint est requis.", + "client-key-tooltip-prk": "La clé publique ou l'identifiant RPK doit respecter la norme [RFC7250] et être encodé en Base64 !", + "client-key-tooltip-psk": "La clé PSK doit respecter la norme [RFC4279] et être au format HexDec : 32, 64 ou 128 caractères !", + "endpoint": "Nom de l’endpoint du client", + "endpoint-required": "Le nom de l’endpoint du client est requis.", "client-public-key": "Clé publique du client", "client-public-key-hint": "Si la clé publique du client est vide, le certificat de confiance sera utilisé", - "client-public-key-tooltip": "La clé publique X509 doit être au format DER-encodé X509v3, uniquement avec l’algorithme EC, et encodée ensuite en Base64 !", + "client-public-key-tooltip": "La clé publique X509 doit être au format X509v3 encodé en DER, uniquement compatible avec l'algorithme EC, puis encodée en Base64 !", "mode": "Mode de configuration de sécurité", "client-tab": "Configuration de sécurité du client", "client-certificate": "Certificat du client", "bootstrap-tab": "Client Bootstrap", "bootstrap-server": "Serveur Bootstrap", "lwm2m-server": "Serveur LwM2M", - "client-publicKey-or-id": "Clé publique ou identifiant du client", - "client-publicKey-or-id-required": "Clé publique ou identifiant du client est requis.", - "client-publicKey-or-id-tooltip-psk": "L'identifiant PSK est un identifiant arbitraire jusqu'à 128 octets, selon la norme [RFC7925].\nIl DOIT être d'abord converti en chaîne puis encodé en UTF-8.", + "client-publicKey-or-id": "Clé publique ou ID du client", + "client-publicKey-or-id-required": "La clé publique ou l'ID du client est requis.", + "client-publicKey-or-id-tooltip-psk": "L'identifiant PSK est un identifiant PSK arbitraire jusqu'à 128 octets, comme décrit dans la norme [RFC7925].\nL'identifiant PSK DOIT d'abord être converti en chaîne de caractères, puis encodé en octets en utilisant UTF-8.", "client-publicKey-or-id-tooltip-rpk": "La clé publique ou l'identifiant RPK doit respecter la norme [RFC7250] et être encodé en Base64 !", - "client-publicKey-or-id-tooltip-x509": "La clé publique X509 doit être au format DER-encodé X509v3, supportant exclusivement l’algorithme EC, et encodée en Base64.", + "client-publicKey-or-id-tooltip-x509": "La clé publique X509 doit être au format X509v3 encodé en DER, uniquement compatible avec l'algorithme EC, puis encodée en Base64.", "client-secret-key": "Clé secrète du client", "client-secret-key-required": "La clé secrète du client est requise.", - "client-secret-key-tooltip-psk": "La clé PSK doit respecter la norme [RFC4279] et être au format HexDec : 32, 64, 128 caractères !", + "client-secret-key-tooltip-psk": "La clé PSK doit respecter la norme [RFC4279] et être au format HexDec : 32, 64 ou 128 caractères !", "client-secret-key-tooltip-prk": "La clé secrète RPK doit être au format PKCS_8 (encodage DER, norme [RFC5958]) puis encodée en Base64 !", "client-secret-key-tooltip-x509": "La clé secrète X509 doit être au format PKCS_8 (encodage DER, norme [RFC5958]) puis encodée en Base64 !" }, @@ -1842,7 +1861,7 @@ "min": "Min", "max": "Max", "step": "Pas", - "selected-options-limit": "Limite d'options sélectionnées", + "selected-options-limit": "Limite des options sélectionnées", "advanced-ui-settings": "Paramètres UI avancés", "disable-on-property": "Désactiver selon la propriété", "disable-on-property-none": "Aucune (champ toujours activé)", @@ -1877,10 +1896,10 @@ "html-section-classes": "Classes de section HTML", "html-section-content": "Contenu de la section HTML", "array-item": "Élément du tableau", - "item-type": "Type d'élément", - "item-name": "Nom de l'élément", + "item-type": "Type d’élément", + "item-name": "Nom de l’élément", "no-items": "Aucun élément", - "support-unit-conversion": "Prise en charge de la conversion d'unités" + "support-unit-conversion": "Supporte la conversion d’unités" }, "clear-form": "Effacer le formulaire", "clear-form-prompt": "Êtes-vous sûr de vouloir supprimer toutes les propriétés du formulaire ?", @@ -1936,28 +1955,28 @@ "invalid-asset-profile-file-error": "Impossible d'importer le profil d'actif : structure de données invalide." }, "device-profile": { - "device-profile": "Profil de dispositif", - "device-profiles": "Profils de dispositifs", + "device-profile": "Profil d'appareil", + "device-profiles": "Profils d'appareils", "all-device-profiles": "Tous", - "add": "Ajouter un profil de dispositif", - "edit": "Modifier le profil de dispositif", - "device-profile-details": "Détails du profil de dispositif", - "no-device-profiles-text": "Aucun profil de dispositif trouvé", - "search": "Rechercher des profils de dispositifs", - "selected-device-profiles": "{ count, plural, =1 {1 profil de dispositif} other {# profils de dispositifs} } sélectionné(s)", - "no-device-profiles-matching": "Aucun profil de dispositif correspondant à '{{entity}}' trouvé.", - "device-profile-required": "Le profil de dispositif est requis", - "idCopiedMessage": "L'identifiant du profil de dispositif a été copié dans le presse-papiers", - "set-default": "Définir comme profil de dispositif par défaut", - "delete": "Supprimer le profil de dispositif", - "copyId": "Copier l'identifiant du profil de dispositif", + "add": "Ajouter un profil d'appareil", + "edit": "Modifier le profil d'appareil", + "device-profile-details": "Détails du profil d'appareil", + "no-device-profiles-text": "Aucun profil d'appareil trouvé", + "search": "Rechercher des profils d'appareils", + "selected-device-profiles": "{ count, plural, =1 {1 profil d'appareil} other {# profils d'appareils} } sélectionné(s)", + "no-device-profiles-matching": "Aucun profil d'appareil correspondant à '{{entity}}' trouvé.", + "device-profile-required": "Le profil d'appareil est requis", + "idCopiedMessage": "L'identifiant du profil d'appareil a été copié dans le presse-papiers", + "set-default": "Définir comme profil d'appareil par défaut", + "delete": "Supprimer le profil d'appareil", + "copyId": "Copier l'identifiant du profil d'appareil", "name-max-length": "Le nom doit contenir moins de 256 caractères", "name": "Nom", "name-required": "Le nom est requis.", "type": "Type de profil", "type-required": "Le type de profil est requis.", "type-default": "Par défaut", - "image": "Image du profil de dispositif", + "image": "Image du profil d'appareil", "transport-type": "Type de transport", "transport-type-required": "Le type de transport est requis.", "transport-type-default": "Par défaut", @@ -1977,33 +1996,33 @@ "transport-configuration": "Configuration du transport", "default-rule-chain": "Chaîne de règles par défaut", "default-edge-rule-chain": "Chaîne de règles Edge par défaut", - "default-edge-rule-chain-hint": "Utilisé sur Edge comme chaîne de règles pour traiter les données entrantes des dispositifs de ce profil", + "default-edge-rule-chain-hint": "Utilisée sur l’Edge comme chaîne de règles pour traiter les données entrantes des appareils liés à ce profil d’appareil", "mobile-dashboard": "Tableau de bord mobile", - "mobile-dashboard-hint": "Utilisé par l'application mobile comme tableau de bord des détails du dispositif", - "select-queue-hint": "Sélectionnez dans une liste déroulante.", - "delete-device-profile-title": "Êtes-vous sûr de vouloir supprimer le profil de dispositif '{{deviceProfileName}}' ?", - "delete-device-profile-text": "Attention, après confirmation, le profil de dispositif et toutes les données associées, y compris les mises à jour OTA, seront irrécupérables.", - "delete-device-profiles-title": "Êtes-vous sûr de vouloir supprimer { count, plural, =1 {1 profil de dispositif} other {# profils de dispositifs} } ?", - "delete-device-profiles-text": "Attention, après confirmation, tous les profils de dispositifs sélectionnés seront supprimés ainsi que toutes les données associées, y compris les mises à jour OTA.", - "set-default-device-profile-title": "Êtes-vous sûr de vouloir définir le profil de dispositif '{{deviceProfileName}}' comme par défaut ?", - "set-default-device-profile-text": "Après confirmation, ce profil de dispositif sera marqué comme par défaut et utilisé pour les nouveaux dispositifs sans profil spécifié.", - "no-device-profiles-found": "Aucun profil de dispositif trouvé.", + "mobile-dashboard-hint": "Utilisé par l'application mobile comme tableau de bord des détails de l’appareil", + "select-queue-hint": "Sélectionnez dans la liste déroulante.", + "delete-device-profile-title": "Voulez-vous vraiment supprimer le profil d’appareil '{{deviceProfileName}}' ?", + "delete-device-profile-text": "Attention, après confirmation, le profil d’appareil et toutes les données associées, y compris les mises à jour OTA, seront irrécupérables.", + "delete-device-profiles-title": "Voulez-vous vraiment supprimer { count, plural, =1 {1 profil d’appareil} other {# profils d’appareil} } ?", + "delete-device-profiles-text": "Attention, après confirmation, tous les profils d’appareil sélectionnés seront supprimés et toutes les données associées, y compris les mises à jour OTA, seront irrécupérables.", + "set-default-device-profile-title": "Voulez-vous définir le profil d’appareil '{{deviceProfileName}}' comme profil par défaut ?", + "set-default-device-profile-text": "Après confirmation, ce profil sera marqué comme par défaut et utilisé pour tout nouvel appareil sans profil spécifié.", + "no-device-profiles-found": "Aucun profil d’appareil trouvé.", "create-new-device-profile": "Créer un nouveau !", - "mqtt-device-topic-filters": "Filtres de sujet MQTT du dispositif", - "mqtt-device-topic-filters-unique": "Les filtres de sujet MQTT doivent être uniques.", - "mqtt-device-topic-filters-spark-plug": "Nœud EoN MQTT Sparkplug B.", - "mqtt-device-topic-filters-spark-plug-hint": "Permet les connexions de nœuds EoN avec format de charge utile et de sujet Sparkplug B.", - "mqtt-device-topic-filters-spark-plug-attribute-metric-names": "Métriques SparkPlug à stocker comme attributs.", - "mqtt-device-topic-filters-spark-plug-attribute-metric-names-hint": "Noms des métriques SparkPlug qui seront stockées comme attributs de l'appareil. Toutes les autres seront stockées comme télémétrie.", - "mqtt-device-payload-type": "Charge utile MQTT du dispositif", + "mqtt-device-topic-filters": "Filtres de topics MQTT pour l’appareil", + "mqtt-device-topic-filters-unique": "Les filtres de topics MQTT doivent être uniques.", + "mqtt-device-topic-filters-spark-plug": "Nœud Edge of Network (EoN) Sparkplug B MQTT.", + "mqtt-device-topic-filters-spark-plug-hint": "Permet les connexions de nœuds EoN avec format de topic et charge utile Sparkplug B.", + "mqtt-device-topic-filters-spark-plug-attribute-metric-names": "Métriques SparkPlug à stocker en tant qu’attributs.", + "mqtt-device-topic-filters-spark-plug-attribute-metric-names-hint": "Noms des métriques SparkPlug qui seront stockées en tant qu’attributs d’appareil. Toutes les autres seront stockées comme télémétrie.", + "mqtt-device-payload-type": "Charge utile MQTT de l’appareil", "mqtt-device-payload-type-json": "JSON", "mqtt-device-payload-type-proto": "Protobuf", "mqtt-enable-compatibility-with-json-payload-format": "Activer la compatibilité avec d'autres formats de charge utile.", - "mqtt-enable-compatibility-with-json-payload-format-hint": "Lorsque cette option est activée, la plateforme utilisera le format Protobuf par défaut. En cas d'échec de l'analyse, elle utilisera le format JSON. Utile pour les mises à jour de firmware. À désactiver une fois tous les dispositifs mis à jour.", - "mqtt-use-json-format-for-default-downlink-topics": "Utiliser le format JSON pour les sujets descendants par défaut", - "mqtt-use-json-format-for-default-downlink-topics-hint": "Utilise JSON pour les sujets : v1/devices/me/attributes/response/$request_id, etc. Ne s'applique pas aux sujets v2.", - "mqtt-send-ack-on-validation-exception": "Envoyer PUBACK en cas d'échec de validation", - "mqtt-send-ack-on-validation-exception-hint": "Par défaut, la session MQTT est fermée sur erreur. Si activé, envoie un accusé de réception PUBACK à la place.", + "mqtt-enable-compatibility-with-json-payload-format-hint": "Lorsqu'activé, la plateforme utilisera par défaut le format de charge utile Protobuf. En cas d'échec du parsing, elle tentera d'utiliser le format JSON. Utile pour la rétrocompatibilité lors des mises à jour du firmware. Par exemple, la version initiale du firmware utilise Json, tandis que la nouvelle version utilise Protobuf. Pendant la mise à jour du parc d'appareils, il est nécessaire de supporter les deux formats simultanément. Ce mode introduit une légère dégradation des performances, il est donc recommandé de le désactiver une fois tous les appareils mis à jour.", + "mqtt-use-json-format-for-default-downlink-topics": "Utiliser le format Json pour les topics descendants par défaut", + "mqtt-use-json-format-for-default-downlink-topics-hint": "Lorsqu’activé, la plateforme utilisera le format de charge utile Json pour envoyer des attributs et des RPC via les topics suivants : v1/devices/me/attributes/response/$request_id, v1/devices/me/attributes, v1/devices/me/rpc/request/$request_id, v1/devices/me/rpc/response/$request_id. Ce paramètre n'affecte pas les abonnements aux attributs et RPC utilisant les nouveaux topics (v2) : v2/a/res/$request_id, v2/a, v2/r/req/$request_id, v2/r/res/$request_id. Où $request_id est un identifiant de requête entier.", + "mqtt-send-ack-on-validation-exception": "Envoyer PUBACK en cas d’échec de validation de message PUBLISH", + "mqtt-send-ack-on-validation-exception-hint": "Par défaut, la plateforme ferme la session MQTT en cas d'échec de validation du message. Lorsqu’activé, elle envoie un accusé de réception (PUBACK) au lieu de fermer la session.", "mqtt-protocol-version": "Version du protocole", "snmp-add-mapping": "Ajouter un mappage SNMP", "snmp-mapping-not-configured": "Aucun mappage OID vers série temporelle ou attribut configuré", @@ -2261,17 +2280,17 @@ "account-after-timeout-tooltip": "Valeur de délai pour l’inscription au serveur Bootstrap.", "server-type": "Type de serveur", "add-new-server-title": "Ajouter une nouvelle configuration de serveur", - "add-server-config": "Ajouter la configuration du serveur", + "add-server-config": "Ajouter une configuration de serveur", "add-lwm2m-server-config": "Ajouter un serveur LwM2M", "no-config-servers": "Aucun serveur configuré", "others-tab": "Autres paramètres", "ota-update": "Mise à jour OTA", "use-object-19-for-ota-update": "Utiliser l'objet 19 pour les métadonnées de fichier OTA (checksum, taille, version, nom)", - "use-object-19-for-ota-update-hint": "Utiliser l'objet ressource avec ObjectId = 19 pour les mises à jour OTA : FirmWare → InstanceId = 65534, SoftWare → InstanceId = 65535. Le format des données est du JSON encodé en Base64. Ce JSON contient les métadonnées du fichier OTA : \"Checksum\" (SHA256). Champs supplémentaires : \"Title\" (nom de la mise à jour OTA), \"Version\" (version OTA), \"File Name\" (nom du fichier pour le stockage OTA côté client), \"File Size\" (taille OTA en octets).", - "client-strategy": "Stratégie client lors de la connexion", + "use-object-19-for-ota-update-hint": "Utiliser l'objet de ressource ObjectId = 19 pour les mises à jour OTA : FirmWare → InstanceId = 65534, SoftWare → InstanceId = 65535. Le format des données est JSON encapsulé en Base64. Ce JSON contient les métadonnées du fichier OTA : \"Checksum\" (SHA256). Champs supplémentaires : \"Title\" (nom OTA), \"Version\" (version OTA), \"File Name\" (nom de fichier à stocker côté client), \"File Size\" (taille du fichier OTA en octets).", + "client-strategy": "Stratégie du client lors de la connexion", "client-strategy-label": "Stratégie", - "client-strategy-only-observe": "Envoyer uniquement la requête d’observation après connexion initiale", - "client-strategy-read-all": "Lire toutes les ressources & envoyer la requête d’observation après enregistrement", + "client-strategy-only-observe": "Envoyer uniquement une requête Observe après la connexion initiale", + "client-strategy-read-all": "Lire toutes les ressources et envoyer une requête Observe après l’enregistrement", "fw-update": "Mise à jour du firmware", "fw-update-strategy": "Stratégie de mise à jour du firmware", "fw-update-strategy-data": "Pousser le firmware en tant que fichier binaire via Objet 19 Ressource 0 (Data)", @@ -2295,20 +2314,20 @@ "min-evaluation-period": "Période d’évaluation minimale", "max-evaluation-period": "Période d’évaluation maximale" }, - "default-object-id": "Version par défaut de l'objet (Attribut)", + "default-object-id": "Version d’objet par défaut (attribut)", "default-object-id-ver": { "v1-0": "1.0", "v1-1": "1.1", "v1-2": "1.2" }, "observe-strategy": { - "observe-strategy": "Stratégie d'observation", + "observe-strategy": "Stratégie d’observation", "single": "Unique", - "single-description": "Une requête Observe par ressource (plus grande précision, plus de trafic réseau)", - "composite-all": "Composé - tout", - "composite-all-description": "Toutes les ressources sont observées avec une seule requête Composite Observe (plus efficace, moins flexible)", - "composite-by-object": "Composé par objets", - "composite-by-object-description": "Les ressources sont regroupées par type d'objet et observées via des requêtes Composite Observe distinctes (approche équilibrée)" + "single-description": "Une requête Observe par ressource (meilleure précision, plus de trafic réseau)", + "composite-all": "Composite global", + "composite-all-description": "Toutes les ressources sont observées avec une seule requête Observe Composite (plus efficace, moins flexible)", + "composite-by-object": "Composite par objets", + "composite-by-object-description": "Les ressources sont regroupées par type d’objet et observées via des requêtes Observe Composite distinctes (approche équilibrée)" } }, "snmp": { @@ -2375,19 +2394,19 @@ "instances": "Instances", "edge-file": "Fichier Edge", "name-max-length": "Le nom doit contenir moins de 256 caractères", - "label-max-length": "Le label doit contenir moins de 256 caractères", + "label-max-length": "Le libellé doit contenir moins de 256 caractères", "type-max-length": "Le type doit contenir moins de 256 caractères", - "management": "Gestion des Edge", - "no-edges-matching": "Aucun Edge correspondant à '{{entity}}' trouvé.", - "add": "Ajouter un Edge", + "management": "Gestion Edge", + "no-edges-matching": "Aucun Edge correspondant à '{{entity}}' n'a été trouvé.", + "add": "Ajouter Edge", "no-edges-text": "Aucun Edge trouvé", - "edge-details": "Détails du Edge", + "edge-details": "Détails Edge", "add-edge-text": "Ajouter un nouveau Edge", - "delete": "Supprimer le Edge", + "delete": "Supprimer Edge", "delete-edge-title": "Êtes-vous sûr de vouloir supprimer le Edge '{{edgeName}}' ?", - "delete-edge-text": "Attention, après confirmation, le Edge et toutes les données associées seront irrécupérables.", + "delete-edge-text": "Attention, après confirmation le Edge et toutes les données associées deviendront irrécupérables.", "delete-edges-title": "Êtes-vous sûr de vouloir supprimer { count, plural, =1 {1 Edge} other {# Edge} } ?", - "delete-edges-text": "Attention, après confirmation, tous les Edge sélectionnés seront supprimés et toutes les données associées seront irrécupérables.", + "delete-edges-text": "Attention, après confirmation tous les Edge sélectionnés et toutes les données associées seront supprimés définitivement.", "name": "Nom", "name-starts-with": "Le nom du Edge commence par", "name-required": "Le nom est requis.", @@ -2398,11 +2417,11 @@ "id-copied-message": "L'ID du Edge a été copié dans le presse-papiers", "sync": "Synchroniser Edge", "edge-required": "Edge requis", - "edge-type": "Type de Edge", - "edge-type-required": "Le type de Edge est requis.", + "edge-type": "Type de l'Edge", + "edge-type-required": "Le type de l'Edge est requis.", "event-action": "Action d'événement", "entity-id": "ID de l'entité", - "select-edge-type": "Sélectionner le type de Edge", + "select-edge-type": "Sélectionner le type de l'Edge", "assign-to-customer": "Assigner à un client", "assign-to-customer-text": "Veuillez sélectionner le client à qui assigner le(s) Edge", "assign-edge-to-customer": "Assigner le(s) Edge à un client", @@ -2428,45 +2447,45 @@ "loading-edge-instructions": "Chargement des instructions pour Edge...", "label": "Label", "load-entity-error": "Échec du chargement des données. L'entité a été supprimée.", - "assign-new-edge": "Attribuer une nouvelle passerelle", - "unassign-from-edge": "Désattribuer de la passerelle", - "edge-key": "Clé de la passerelle", - "copy-edge-key": "Copier la clé de la passerelle", - "edge-key-copied-message": "La clé de la passerelle a été copiée dans le presse-papiers", - "edge-secret": "Secret de la passerelle", - "copy-edge-secret": "Copier le secret de la passerelle", - "edge-secret-copied-message": "Le secret de la passerelle a été copié dans le presse-papiers", - "manage-assets": "Gérer les actifs", + "assign-new-edge": "Assigner un nouvel Edge", + "unassign-from-edge": "Désassigner de l'Edge", + "edge-key": "Clé Edge", + "copy-edge-key": "Copier la clé Edge", + "edge-key-copied-message": "La clé Edge a été copiée dans le presse-papiers", + "edge-secret": "Secret Edge", + "copy-edge-secret": "Copier le secret Edge", + "edge-secret-copied-message": "Le secret Edge a été copié dans le presse-papiers", + "manage-assets": "Gérer les assets", "manage-devices": "Gérer les appareils", - "manage-entity-views": "Gérer les vues d'entité", + "manage-entity-views": "Gérer les vues d'entités", "manage-dashboards": "Gérer les tableaux de bord", "manage-rulechains": "Gérer les chaînes de règles", - "assets": "Actifs de la passerelle", - "devices": "Appareils de la passerelle", - "entity-views": "Vues d'entité de la passerelle", - "dashboard": "Tableau de bord de la passerelle", - "dashboards": "Tableaux de bord de la passerelle", + "assets": "Assets Edge", + "devices": "Appareils Edge", + "entity-views": "Vues d'entités Edge", + "dashboard": "Tableau de bord Edge", + "dashboards": "Tableaux de bord Edge", "rulechain-templates": "Modèles de chaînes de règles", - "edge-rulechain-templates": "Modèles de chaînes de règles pour passerelle", - "rulechains": "Chaînes de règles de la passerelle", - "search": "Rechercher des passerelles", - "selected-edges": "{ count, plural, =1 {1 passerelle} other {# passerelles} } sélectionnée(s)", - "any-edge": "Toute passerelle", - "no-edge-types-matching": "Aucun type de passerelle correspondant à '{{entitySubtype}}' n'a été trouvé.", - "edge-type-list-empty": "Aucun type de passerelle sélectionné.", - "edge-types": "Types de passerelles", - "enter-edge-type": "Saisir un type de passerelle", - "deployed": "Déployée", + "edge-rulechain-templates": "Modèles de chaînes de règles Edge", + "rulechains": "Chaînes de règles Edge", + "search": "Rechercher des Edge", + "selected-edges": "{ count, plural, =1 {1 Edge} other {# Edge} } sélectionné(s)", + "any-edge": "N’importe quel Edge", + "no-edge-types-matching": "Aucun type d’Edge correspondant à '{{entitySubtype}}' trouvé.", + "edge-type-list-empty": "Aucun type d’Edge sélectionné.", + "edge-types": "Types d’Edge", + "enter-edge-type": "Saisir un type d’Edge", + "deployed": "Déployé", "pending": "En attente", "downlinks": "Liaisons descendantes", "no-downlinks-prompt": "Aucune liaison descendante trouvée", - "sync-process-started-successfully": "Le processus de synchronisation a démarré avec succès !", - "missing-related-rule-chains-title": "La passerelle a des chaînes de règles liées manquantes", - "missing-related-rule-chains-text": "Les chaînes de règles attribuées à la passerelle utilisent des nœuds de règle qui transfèrent des messages vers des chaînes de règles non attribuées à cette passerelle.

Liste des chaînes de règles manquantes :
{{missingRuleChains}}", - "widget-datasource-error": "Ce widget ne prend en charge que les sources de données de type ENTITÉ PASSERELLE", + "sync-process-started-successfully": "Le processus de synchronisation a démarré avec succès!", + "missing-related-rule-chains-title": "Des chaînes de règles associées manquent sur l’Edge", + "missing-related-rule-chains-text": "Les chaînes de règles affectées à l’Edge utilisent des nœuds de règles qui transfèrent des messages vers des chaînes non affectées à cet Edge.

Liste des chaînes de règles manquantes :
{{missingRuleChains}}", + "widget-datasource-error": "Ce widget prend uniquement en charge les sources de données de type EDGE", "upgrade-instructions": "Instructions de mise à jour", - "connected": "Connectée", - "disconnected": "Déconnectée" + "connected": "Connecté", + "disconnected": "Déconnecté" }, "edge-event": { "type-dashboard": "Tableau de bord", @@ -2478,7 +2497,7 @@ "type-alarm": "Alarme", "type-rule-chain": "Chaîne de règles", "type-rule-chain-metadata": "Métadonnées de chaîne de règles", - "type-edge": "Passerelle", + "type-edge": "Edge", "type-user": "Utilisateur", "type-tenant": "Locataire", "type-tenant-profile": "Profil de locataire", @@ -2506,8 +2525,8 @@ "action-type-alarm-clear": "Réinitialisation de l'alarme", "action-type-alarm-assigned": "Alarme attribuée", "action-type-alarm-unassigned": "Alarme désattribuée", - "action-type-assigned-to-edge": "Attribué à une passerelle", - "action-type-unassigned-from-edge": "Désattribué d'une passerelle", + "action-type-assigned-to-edge": "Assigné à Edge", + "action-type-unassigned-from-edge": "Désassigné de l'Edge", "action-type-credentials-request": "Demande d'identifiants", "action-type-entity-merge-request": "Demande de fusion d'entités" }, @@ -2624,17 +2643,17 @@ "type-rulenode": "Nœud de règle", "type-rulenodes": "Nœuds de règle", "list-of-rulenodes": "{ count, plural, =1 {Un nœud de règle} other {Liste de # nœuds de règle} }", - "rulenode-name-starts-with": "Nœuds de règle dont les noms commencent par '{{prefix}}'", + "rulenode-name-starts-with": "Nœuds de règle dont le nom commence par '{{prefix}}'", "type-current-customer": "Client actuel", "type-current-tenant": "Locataire actuel", "type-current-user": "Utilisateur actuel", - "type-current-user-owner": "Propriétaire utilisateur actuel", + "type-current-user-owner": "Propriétaire de l'utilisateur actuel", "type-calculated-field": "Champ calculé", "type-calculated-fields": "Champs calculés", "type-ai-model": "Modèle IA", "type-ai-models": "Modèles IA", - "type-widgets-bundle": "Pack de widgets", - "type-widgets-bundles": "Packs de widgets", + "type-widgets-bundle": "Lot de widgets", + "type-widgets-bundles": "Lots de widgets", "list-of-widgets-bundles": "{ count, plural, =1 {Un pack de widgets} other {Liste de # packs de widgets} }", "type-widget": "Widget", "type-widgets": "Widgets", @@ -2661,13 +2680,13 @@ "type-tb-resource": "Ressource", "type-tb-resources": "Ressources", "list-of-tb-resources": "{ count, plural, =1 {Une ressource} other {Liste de # ressources} }", - "type-ota-package": "Paquet OTA", + "type-ota-package": "Package OTA", "type-ota-packages": "Packages OTA", "list-of-ota-packages": "{ count, plural, =1 {Un package OTA} other {Liste de # packages OTA} }", "type-rpc": "RPC", - "type-queue": "File d'attente", - "type-queue-stats": "Statistiques de file d'attente", - "type-queues-stats": "Statistiques des files d'attente", + "type-queue": "File d’attente", + "type-queue-stats": "Statistiques de file d’attente", + "type-queues-stats": "Statistiques des files d’attente", "type-notification": "Notification", "type-notification-rule": "Règle de notification", "type-notification-rules": "Règles de notification", @@ -2675,7 +2694,7 @@ "type-notification-target": "Destinataire de notification", "type-notification-targets": "Destinataires de notification", "list-of-notification-targets": "{ count, plural, =1 {Un destinataire de notification} other {Liste de # destinataires de notification} }", - "type-notification-request": "Demande de notification", + "type-notification-request": "Requête de notification", "type-notification-template": "Modèle de notification", "type-notification-templates": "Modèles de notification", "list-of-notification-templates": "{ count, plural, =1 {Un modèle de notification} other {Liste de # modèles de notification} }", @@ -2691,7 +2710,7 @@ "list-of-mobile-apps": "{ count, plural, =1 {Une application mobile} other {Liste de # applications mobiles} }", "type-mobile-app-bundle": "Pack mobile", "type-mobile-app-bundles": "Packs mobiles", - "list-of-mobile-app-bundles": "{ count, plural, =1 {Un pack mobile} other {Liste de # packs mobiles} }" + "list-of-mobile-app-bundles": "{ count, plural, =1 {Un bundle mobile} other {Liste de # bundles mobiles} }" }, "entity-field": { "created-time": "Date de création", @@ -2762,20 +2781,20 @@ "unassign-entity-views": "Désassigner les vues d'entité", "unassign-entity-views-action-title": "Désassigner { count, plural, =1 {1 vue d'entité} other {# vues d'entité} } du client", "assign-new-entity-view": "Assigner une nouvelle vue d'entité", - "delete-entity-view-title": "Êtes-vous sûr de vouloir supprimer la vue d'entité '{{entityViewName}}' ?", - "delete-entity-view-text": "Attention, après confirmation, la vue d'entité et toutes ses données seront irrécupérables.", - "delete-entity-views-title": "Êtes-vous sûr de vouloir supprimer { count, plural, =1 {1 vue d'entité} other {# vues d'entité} } ?", - "delete-entity-views-action-title": "Supprimer { count, plural, =1 {1 vue d'entité} other {# vues d'entité} }", - "delete-entity-views-text": "Attention, après confirmation, toutes les vues d'entité sélectionnées seront supprimées avec leurs données.", - "make-public-entity-view-title": "Êtes-vous sûr de vouloir rendre la vue d'entité '{{entityViewName}}' publique ?", - "make-public-entity-view-text": "Après confirmation, la vue d'entité et ses données seront rendues publiques.", - "make-private-entity-view-title": "Êtes-vous sûr de vouloir rendre la vue d'entité '{{entityViewName}}' privée ?", - "make-private-entity-view-text": "Après confirmation, la vue d'entité et ses données seront rendues privées.", - "unassign-entity-view-title": "Êtes-vous sûr de vouloir désassigner la vue d'entité '{{entityViewName}}' ?", - "unassign-entity-view-text": "Après confirmation, la vue d'entité ne sera plus accessible au client.", - "unassign-entity-view": "Désassigner la vue d'entité", - "unassign-entity-views-title": "Êtes-vous sûr de vouloir désassigner { count, plural, =1 {1 vue d'entité} other {# vues d'entité} } ?", - "unassign-entity-views-text": "Après confirmation, toutes les vues d'entité sélectionnées seront désassignées.", + "delete-entity-view-title": "Voulez-vous vraiment supprimer la vue d’entité '{{entityViewName}}' ?", + "delete-entity-view-text": "Attention, après confirmation, la vue d’entité et toutes les données associées seront irrécupérables.", + "delete-entity-views-title": "Voulez-vous vraiment supprimer { count, plural, =1 {1 vue d’entité} other {# vues d’entité} } ?", + "delete-entity-views-action-title": "Supprimer { count, plural, =1 {1 vue d’entité} other {# vues d’entité} }", + "delete-entity-views-text": "Attention, après confirmation, toutes les vues d’entité sélectionnées seront supprimées et toutes les données associées seront irrécupérables.", + "make-public-entity-view-title": "Voulez-vous vraiment rendre la vue d’entité '{{entityViewName}}' publique ?", + "make-public-entity-view-text": "Après confirmation, la vue d’entité et toutes ses données seront rendues publiques et accessibles à d’autres utilisateurs.", + "make-private-entity-view-title": "Voulez-vous vraiment rendre la vue d’entité '{{entityViewName}}' privée ?", + "make-private-entity-view-text": "Après confirmation, la vue d’entité et toutes ses données seront rendues privées et ne seront plus accessibles aux autres utilisateurs.", + "unassign-entity-view-title": "Voulez-vous vraiment désaffecter la vue d’entité '{{entityViewName}}' ?", + "unassign-entity-view-text": "Après confirmation, la vue d’entité sera désaffectée et ne sera plus accessible par le client.", + "unassign-entity-view": "Désaffecter la vue d’entité", + "unassign-entity-views-title": "Voulez-vous vraiment désaffecter { count, plural, =1 {1 vue d’entité} other {# vues d’entité} } ?", + "unassign-entity-views-text": "Après confirmation, toutes les vues d’entité sélectionnées seront désaffectées et ne seront plus accessibles par le client.", "entity-view-type": "Type de vue d'entité", "entity-view-type-required": "Le type de vue d'entité est requis.", "select-entity-view-type": "Sélectionner le type de vue d'entité", @@ -2811,19 +2830,19 @@ "timeseries-placeholder": "Séries temporelles", "target-entity": "Entité cible", "attributes-propagation": "Propagation des attributs", - "attributes-propagation-hint": "La vue d'entité copiera automatiquement les attributs spécifiés de l'entité cible chaque fois que vous enregistrez ou mettez à jour cette vue d'entité. Pour des raisons de performance, les attributs ne sont pas propagés automatiquement à chaque changement. Activez cette propagation via le nœud de règle « copy to view » lié aux messages « Post attributes » et « Attributes Updated ».", + "attributes-propagation-hint": "La vue d’entité copiera automatiquement les attributs spécifiés de l’entité cible à chaque enregistrement ou mise à jour de cette vue. Pour des raisons de performance, les attributs de l’entité cible ne sont pas propagés à la vue d’entité à chaque modification. Vous pouvez activer la propagation automatique en configurant un nœud de règle \"copy to view\" dans votre chaîne de règles et en liant les messages \"Post attributes\" et \"Attributes Updated\" à ce nouveau nœud.", "timeseries-data": "Données de séries temporelles", - "timeseries-data-hint": "Configurez les clés de séries temporelles de l'entité cible qui seront accessibles dans la vue d'entité. Ces données sont en lecture seule.", - "search": "Rechercher des vues d'entité", - "selected-entity-views": "{ count, plural, =1 {1 vue d'entité} other {# vues d'entité} } sélectionnée(s)", - "assign-entity-view-to-edge": "Assigner des vues d'entité à l'Edge", - "assign-entity-view-to-edge-text": "Veuillez sélectionner les vues d'entité à assigner à l'Edge", - "unassign-entity-view-from-edge-title": "Êtes-vous sûr de vouloir désassigner la vue d'entité '{{entityViewName}}' ?", - "unassign-entity-view-from-edge-text": "Après confirmation, la vue d'entité sera désassignée et ne sera plus accessible par l'Edge.", - "unassign-entity-views-from-edge-action-title": "Désassigner { count, plural, =1 {1 vue d'entité} other {# vues d'entité} } de l'Edge", - "unassign-entity-view-from-edge": "Désassigner la vue d'entité", - "unassign-entity-views-from-edge-title": "Êtes-vous sûr de vouloir désassigner { count, plural, =1 {1 vue d'entité} other {# vues d'entité} } ?", - "unassign-entity-views-from-edge-text": "Après confirmation, toutes les vues d'entité sélectionnées seront désassignées et ne seront plus accessibles par l'Edge." + "timeseries-data-hint": "Configurez les clés de séries temporelles de l’entité cible qui seront accessibles à la vue d’entité. Ces données sont en lecture seule.", + "search": "Rechercher des vues d’entité", + "selected-entity-views": "{ count, plural, =1 {1 vue d’entité} other {# vues d’entité} } sélectionnée(s)", + "assign-entity-view-to-edge": "Assigner la(les) vue(s) d’entité à l’Edge", + "assign-entity-view-to-edge-text": "Veuillez sélectionner les vues d’entité à assigner à l’Edge", + "unassign-entity-view-from-edge-title": "Voulez-vous vraiment désaffecter la vue d’entité '{{entityViewName}}' ?", + "unassign-entity-view-from-edge-text": "Après confirmation, la vue d’entité sera désaffectée et ne sera plus accessible par l’Edge.", + "unassign-entity-views-from-edge-action-title": "Désaffecter { count, plural, =1 {1 vue d’entité} other {# vues d’entité} } de l’Edge", + "unassign-entity-view-from-edge": "Désaffecter la vue d’entité", + "unassign-entity-views-from-edge-title": "Voulez-vous vraiment désaffecter { count, plural, =1 {1 vue d’entité} other {# vues d’entité} } ?", + "unassign-entity-views-from-edge-text": "Après confirmation, toutes les vues d’entité sélectionnées seront désaffectées et ne seront plus accessibles par l’Edge." }, "event": { "event-type": "Type d'événement", @@ -3044,18 +3063,18 @@ "duplicate-filter": "Un filtre portant le même nom existe déjà.", "filters": "Filtres", "unable-delete-filter-title": "Impossible de supprimer le filtre", - "unable-delete-filter-text": "Le filtre '{{filter}}' ne peut pas être supprimé car il est utilisé par les widgets suivants :
{{widgetsList}}", - "duplicate-filter-error": "Filtre en double trouvé '{{filter}}'.
Les filtres doivent être uniques au sein du tableau de bord.", - "missing-key-filters-error": "Les filtres clés sont manquants pour le filtre '{{filter}}'.", + "unable-delete-filter-text": "Le filtre '{{filter}}' ne peut pas être supprimé car il est utilisé par le(s) widget(s) suivant(s) :
{{widgetsList}}", + "duplicate-filter-error": "Filtre dupliqué détecté '{{filter}}'.
Les filtres doivent être uniques dans le tableau de bord.", + "missing-key-filters-error": "Il manque des filtres clés pour le filtre '{{filter}}'.", "filter": "Filtre", - "editable": "Éditable", - "editable-hint": "Autoriser l'utilisateur à modifier la valeur du filtre dans les tableaux de bord.", + "editable": "Modifiable", + "editable-hint": "Permettre à l’utilisateur de modifier la valeur du filtre dans les tableaux de bord.", "no-filters-found": "Aucun filtre trouvé.", "no-filter-text": "Aucun filtre spécifié", "add-filter-prompt": "Veuillez ajouter un filtre", "no-filter-matching": "'{{filter}}' introuvable.", - "create-new-filter": "Créer un nouveau !", - "create-new": "Créer nouveau", + "create-new-filter": "Créer un nouveau filtre !", + "create-new": "Créer", "filter-required": "Le filtre est requis.", "operation": { "operation": "Opération", @@ -3086,21 +3105,21 @@ "complex-filter": "Filtre complexe", "edit-complex-filter": "Modifier le filtre complexe", "edit-filter-user-params": "Modifier les paramètres utilisateur du prédicat du filtre", - "filter-user-params": "Paramètres utilisateur du prédicat du filtre", + "filter-user-params": "Paramètres utilisateur du prédicat de filtre", "user-parameters": "Paramètres utilisateur", - "display-label": "Libellé à afficher", + "display-label": "Libellé affiché", "custom-label": "Libellé personnalisé", - "custom-label-hint": "Activer pour définir votre propre étiquette pour le filtre. Si désactivé, une étiquette sera générée automatiquement.", - "order-priority": "Priorité d'ordre des champs", - "key-filter": "Filtre par clé", - "key-filters": "Filtres par clé", + "custom-label-hint": "Activer pour définir un libellé personnalisé pour le filtre. Lorsqu’il est désactivé, un libellé sera généré automatiquement.", + "order-priority": "Ordre d’affichage", + "key-filter": "Filtre clé", + "key-filters": "Filtres clés", "key-name": "Nom de la clé", "key-name-required": "Le nom de la clé est requis.", "key-type": { "key-type": "Type de clé", "attribute": "Attribut", "timeseries": "Séries temporelles", - "entity-field": "Champ d'entité", + "entity-field": "Champ d’entité", "constant": "Constante", "client-attribute": "Attribut client", "server-attribute": "Attribut serveur", @@ -3114,12 +3133,12 @@ "date-time": "Date/Heure" }, "value-type-required": "Le type de valeur de la clé est requis.", - "key-value-type-change-title": "Êtes-vous sûr de vouloir changer le type de valeur de la clé ?", - "key-value-type-change-message": "Si vous confirmez le nouveau type de valeur, tous les filtres de clés saisis seront supprimés.", - "no-key-filters": "Aucun filtre de clé configuré", - "add-key-filter": "Ajouter un filtre de clé", - "remove-key-filter": "Supprimer le filtre de clé", - "edit-key-filter": "Modifier le filtre de clé", + "key-value-type-change-title": "Voulez-vous vraiment changer le type de valeur de la clé ?", + "key-value-type-change-message": "Si vous confirmez le nouveau type de valeur, tous les filtres clés saisis seront supprimés.", + "no-key-filters": "Aucun filtre clé configuré", + "add-key-filter": "Ajouter un filtre clé", + "remove-key-filter": "Supprimer le filtre clé", + "edit-key-filter": "Modifier le filtre clé", "date": "Date", "time": "Heure", "current-tenant": "Locataire actuel", @@ -3132,10 +3151,10 @@ "dynamic-value": "Valeur dynamique", "no-dynamic-value": "Aucune valeur dynamique", "source-attribute": "Attribut source", - "switch-to-dynamic-value": "Basculer vers la valeur dynamique", - "switch-to-default-value": "Basculer vers la valeur par défaut", + "switch-to-dynamic-value": "Passer à une valeur dynamique", + "switch-to-default-value": "Revenir à la valeur par défaut", "inherit-owner": "Hériter du propriétaire", - "source-attribute-not-set": "Si l'attribut source n'est pas défini", + "source-attribute-not-set": "Si l’attribut source n’est pas défini", "unit": "Unité" }, "fullscreen": { @@ -3213,13 +3232,13 @@ "image-preview": "Aperçu de l'image", "update-image": "Mettre à jour l'image", "export-failed-error": "Impossible d'exporter l'image : {{error}}", - "image-json-file": "Fichier JSON d'image", - "invalid-image-json-file-error": "Impossible d'importer l'image : structure JSON invalide.", - "image-is-in-use": "L'image est utilisée par d'autres entités", - "images-are-in-use": "Certaines images sont utilisées par d'autres entités", - "image-is-in-use-text": "L'image '{{title}}' n'a pas été supprimée car elle est utilisée par les entités suivantes :", - "images-are-in-use-text": "Toutes les images n'ont pas été supprimées car elles sont utilisées par d'autres entités.
Vous pouvez voir les entités référencées en cliquant sur le bouton Références dans la ligne de l'image concernée.
Si vous souhaitez tout de même les supprimer, sélectionnez-les dans le tableau ci-dessous puis cliquez sur le bouton Supprimer la sélection.", - "delete-image-in-use-text": "Si vous souhaitez tout de même supprimer l'image, cliquez sur le bouton Supprimer quand même.", + "image-json-file": "Fichier JSON de l’image", + "invalid-image-json-file-error": "Impossible d’importer l’image depuis le JSON : structure de données JSON invalide.", + "image-is-in-use": "L’image est utilisée par d’autres entités", + "images-are-in-use": "Des images sont utilisées par d’autres entités", + "image-is-in-use-text": "L’image '{{title}}' n’a pas été supprimée car elle est utilisée par les entités suivantes :", + "images-are-in-use-text": "Toutes les images n’ont pas été supprimées car elles sont utilisées par d’autres entités.
Vous pouvez consulter les entités référencées en cliquant sur le bouton Références dans la ligne correspondante de l’image.
Si vous souhaitez tout de même supprimer ces images, sélectionnez-les dans le tableau ci-dessous et cliquez sur le bouton Supprimer la sélection.", + "delete-image-in-use-text": "Si vous souhaitez tout de même supprimer l’image, cliquez sur le bouton Supprimer quand même.", "system-entities": "Entités système :", "entities": "entités :", "references": "Références", @@ -3301,7 +3320,7 @@ "community-string": "Chaîne de communauté SNMP" }, "isgateway": "Est une passerelle", - "activity-time-from-gateway-device": "Heure d'activité depuis le périphérique passerelle", + "activity-time-from-gateway-device": "Heure d'activité depuis l'appareil passerelle", "description": "Description", "routing-key": "Clé Edge", "secret": "Secret Edge" @@ -3521,11 +3540,11 @@ "power-button-background": "Arrière-plan du bouton de mise sous tension", "value-box-background": "Arrière-plan de la boîte de valeur", "value-units": "Unités de valeur", - "enable-units-scale": "Activer les unités sur l'échelle", + "enable-units-scale": "Activer les unités sur l’échelle", "filtration-mode": "Mode de filtration", "filtration-mode-hint": "Valeur entière indiquant le mode de filtration actuel.", - "filtration-mode-update": "État de mise à jour du mode de filtration", - "filtration-mode-update-hint": "Action déclenchée lorsque l'utilisateur clique pour modifier le mode de filtration actuel.", + "filtration-mode-update": "Mise à jour du mode de filtration", + "filtration-mode-update-hint": "Action déclenchée lorsque l’utilisateur clique pour changer le mode de filtration actuel.", "filter-mode": "Filtration", "waste-mode": "Déchet", "backwash-mode": "Contre-lavage", @@ -3834,12 +3853,12 @@ "min-version": "Version minimale", "invalid-version-pattern": "Format de version invalide. Veuillez utiliser le format : majeur.mineur.correctif (ex. : 1.0.0).", "mobile-center": "Centre mobile", - "mobile-package": "Package de l'application", - "mobile-package-max-length": "Le package de l'application doit contenir moins de 256 caractères", - "mobile-package-required": "Le package de l'application est requis.", - "mobile-package-pattern": "Format du package de l'application invalide", - "mobile-package-title": "Titre de l'application", - "mobile-package-title-max-length": "Le titre de l'application doit contenir moins de 256 caractères", + "mobile-package": "Package de l’application", + "mobile-package-max-length": "Le package de l’application doit contenir moins de 256 caractères", + "mobile-package-required": "Le package de l’application est requis.", + "mobile-package-pattern": "Format du package de l’application invalide", + "mobile-package-title": "Titre de l’application", + "mobile-package-title-max-length": "Le titre de l’application doit contenir moins de 256 caractères", "no-application": "Aucune application trouvée", "no-bundles": "Aucun bundle trouvé", "platform-type": "Type de plateforme", @@ -3898,7 +3917,7 @@ "max-element-number": "Nombre maximal d'éléments", "page-name": "Nom de la page", "page-name-required": "Le nom de la page est requis.", - "page-name-cannot-contain-only-spaces": "Le nom de la page ne peut contenir uniquement des espaces.", + "page-name-cannot-contain-only-spaces": "Le nom de la page ne peut pas contenir uniquement des espaces.", "page-name-max-length": "Le nom de la page doit contenir moins de 256 caractères", "page-type": "Type de page", "pages-types": { @@ -3919,15 +3938,15 @@ "configuration-dialog": "Dialogue de configuration", "configuration-app": "Application de configuration", "configuration-step": { - "prepare-environment-title": "Préparer l'environnement de développement", - "prepare-environment-text": "L'application mobile Flutter ThingsBoard nécessite le SDK Flutter. Suivez les instructions pour configurer le SDK Flutter.", - "get-source-code-title": "Obtenir le code source de l'application", - "get-source-code-text": "Vous pouvez obtenir le code source de l'application mobile Flutter ThingsBoard en le clonant depuis le dépôt GitHub :", - "configure-app-settings-title": "Configurer les paramètres de l'application", - "configure-app-settings-text": "Téléchargez le fichier de configuration et placez-le dans le répertoire racine du projet que vous avez cloné à l'étape précédente.", + "prepare-environment-title": "Préparer l’environnement de développement", + "prepare-environment-text": "L’application mobile ThingsBoard Flutter nécessite le SDK Flutter. Suivez les instructions pour configurer le SDK Flutter.", + "get-source-code-title": "Obtenir le code source de l’application", + "get-source-code-text": "Vous pouvez obtenir le code source de l’application mobile ThingsBoard Flutter en le clonant depuis le dépôt GitHub :", + "configure-app-settings-title": "Configurer les paramètres de l’application", + "configure-app-settings-text": "Téléchargez le fichier de configuration et placez-le dans le répertoire racine du projet que vous avez cloné à l’étape précédente.", "download-file": "Télécharger le fichier", - "run-app-title": "Exécuter l'application", - "run-app-text": "Exécutez l'application comme décrit dans votre IDE.\nSi vous utilisez le terminal, exécutez l'application avec la commande suivante :", + "run-app-title": "Exécuter l’application", + "run-app-text": "Exécutez l’application comme indiqué dans votre IDE.\nSi vous utilisez le terminal, lancez l’application avec la commande suivante :", "more-information": "Des informations détaillées sont disponibles dans notre documentation de démarrage.", "getting-started": "Démarrage" } @@ -3948,13 +3967,13 @@ "alarm-comment-trigger-settings": "Paramètres du déclencheur de commentaire d'alarme", "alarm-trigger-settings": "Paramètres du déclencheur d'alarme", "all": "Tous", - "api-feature-hint": "Si le champ est vide, le déclencheur s'appliquera à toutes les fonctionnalités API", - "api-usage-trigger-settings": "Paramètres du déclencheur d'utilisation de l'API", - "new-platform-version-trigger-settings": "Paramètres du déclencheur de nouvelle version de la plateforme", - "rate-limits-trigger-settings": "Paramètres du déclencheur de dépassement de limites", - "task-processing-failure-trigger-settings": "Paramètres du déclencheur d'échec du traitement de tâche", - "resources-shortage-trigger-settings": "Paramètres de déclenchement de pénurie de ressources", - "at-least-one-should-be-selected": "Au moins un élément doit être sélectionné", + "api-feature-hint": "Si le champ est vide, le déclencheur s’appliquera à toutes les fonctionnalités API", + "api-usage-trigger-settings": "Paramètres de déclenchement d’usage de l’API", + "new-platform-version-trigger-settings": "Paramètres de déclenchement de nouvelle version de la plateforme", + "rate-limits-trigger-settings": "Paramètres de déclenchement pour dépassement des limites de débit", + "task-processing-failure-trigger-settings": "Paramètres de déclenchement pour échec de traitement de tâche", + "resources-shortage-trigger-settings": "Paramètres de déclenchement pour pénurie de ressources", + "at-least-one-should-be-selected": "Au moins une option doit être sélectionnée", "basic-settings": "Paramètres de base", "button-text": "Texte du bouton", "button-text-required": "Le texte du bouton est requis", @@ -3965,7 +3984,7 @@ "copy-notification-template": "Copier le modèle de notification", "copy-rule": "Copier la règle", "copy-template": "Copier le modèle", - "create-new": "Créer nouveau", + "create-new": "Créer", "created": "Créé", "customize-messages": "Personnaliser les messages", "cpu-threshold": "Seuil CPU", @@ -4005,17 +4024,17 @@ "mobile-app": "Application mobile", "mobile-app-preview": "Aperçu de la notification mobile" }, - "delivery-method-not-configure-click": "Méthode de livraison non configurée. Cliquez pour configurer.", - "delivery-method-not-configure-contact": "Méthode de livraison non configurée. Veuillez contacter votre administrateur système.", + "delivery-method-not-configure-click": "La méthode de livraison n'est pas configurée. Cliquez pour la configurer.", + "delivery-method-not-configure-contact": "La méthode de livraison n'est pas configurée. Contactez votre administrateur système.", "delivery-methods": "Méthodes de livraison", "description": "Description", - "device-activity-trigger-settings": "Paramètres du déclencheur d'activité du dispositif", - "device-list-rule-hint": "Si le champ est vide, le déclencheur s'appliquera à tous les dispositifs", - "device-profiles-list-rule-hint": "Si le champ est vide, le déclencheur s'appliquera à tous les profils de dispositifs", + "device-activity-trigger-settings": "Paramètres de déclenchement d'activité de l'appareil", + "device-list-rule-hint": "Si le champ est vide, le déclencheur s'appliquera à tous les appareils", + "device-profiles-list-rule-hint": "Si le champ est vide, le déclencheur s'appliquera à tous les profils d'appareil", "disabled": "Désactivé", - "edge-trigger-settings": "Paramètres du déclencheur Edge", + "edge-trigger-settings": "Paramètres de déclenchement Edge", "edge-list-rule-hint": "Si le champ est vide, le déclencheur s'appliquera à toutes les instances Edge", - "edit-notification-recipients-group": "Modifier le groupe de destinataires de notification", + "edit-notification-recipients-group": "Modifier le groupe de destinataires des notifications", "edit-notification-template": "Modifier le modèle de notification", "edit-rule": "Modifier la règle", "edit-template": "Modifier le modèle", @@ -4038,7 +4057,7 @@ "link-max-length": "Le lien doit comporter au maximum {{ length }} caractères", "link-type": { "dashboard": "Ouvrir le tableau de bord", - "link": "Ouvrir un lien URL" + "link": "Ouvrir le lien URL" }, "loading-notifications": "Chargement des notifications...", "management": "Gestion des notifications", @@ -4046,20 +4065,20 @@ "mark-as-read": "Marquer comme lu", "message": "Message", "message-required": "Le message est requis", - "message-max-length": "Le message doit contenir au maximum {{ length }} caractères", + "message-max-length": "Le message doit comporter au maximum {{ length }} caractères", "name": "Nom", "name-required": "Le nom est requis", "new-notification": "Nouvelle notification", "no-inbox-notification": "Aucune notification trouvée", "no-notification-request": "Aucune demande de notification", "no-notification-templates": "Aucun modèle de notification trouvé", - "no-notifications-yet": "Aucune notification pour l’instant", - "no-recipients-notification": "Aucun destinataire pour cette notification", + "no-notifications-yet": "Aucune notification pour le moment", + "no-recipients-notification": "Aucun destinataire de notification", "no-recipients-matching": "Aucun destinataire correspondant à '{{entity}}' trouvé.", "no-recipients-text": "Aucun destinataire trouvé", "no-rule": "Aucune règle configurée", "no-rules-notification": "Aucune règle de notification", - "no-severity-found": "Aucune sévérité trouvée", + "no-severity-found": "Aucun niveau de gravité trouvé", "no-severity-matching": "'{{severity}}' introuvable.", "no-template-matching": "Aucune ressource correspondant à '{{template}}' trouvée.", "create-new-template": "Créer un nouveau modèle !", @@ -4086,20 +4105,20 @@ "only-rule-chain-lifecycle-failures": "Uniquement les échecs de cycle de vie de chaîne de règles", "only-rule-node-lifecycle-failures": "Uniquement les échecs de cycle de vie de nœud de règles", "platform-users": "Utilisateurs de la plateforme", - "ram-threshold": "Seuil RAM", - "rate-limits": "Limites de taux", - "rate-limits-hint": "Si le champ est vide, le déclencheur s’appliquera à toutes les limites de taux", + "ram-threshold": "Seuil de RAM", + "rate-limits": "Limites de débit", + "rate-limits-hint": "Si le champ est vide, le déclencheur s'appliquera à toutes les limites de débit", "recipient": "Destinataire", "recipient-group": "Groupe de destinataires", "recipient-type": { - "affected-tenant-administrators": "Administrateurs du locataire concerné", + "affected-tenant-administrators": "Administrateurs de locataires concernés", "affected-user": "Utilisateur concerné", "all-users": "Tous les utilisateurs", - "customer-users": "Utilisateurs client", + "customer-users": "Utilisateurs du client", "system-administrators": "Administrateurs système", - "tenant-administrators": "Administrateurs du locataire", - "user-filters": "Filtre d'utilisateur", - "user-list": "Liste d’utilisateurs", + "tenant-administrators": "Administrateurs de locataires", + "user-filters": "Filtre utilisateur", + "user-list": "Liste des utilisateurs", "users-entity-owner": "Utilisateurs du propriétaire de l'entité" }, "recipients": "Destinataires", @@ -4149,20 +4168,20 @@ "private-channel": "Canal privé", "public-channel": "Canal public" }, - "start-from-scratch": "Commencer de zéro", + "start-from-scratch": "Repartir de zéro", "status": "Statut", "stop-escalation-alarm-status-become": "Arrêter l'escalade lorsque le statut de l'alarme devient :", "storage-threshold": "Seuil de stockage", - "subject": "Sujet", - "subject-required": "Le sujet est requis", - "subject-max-length": "Le sujet doit contenir au maximum {{ length }} caractères", + "subject": "Objet", + "subject-required": "L'objet est requis", + "subject-max-length": "L'objet doit comporter au maximum {{ length }} caractères", "template": "Modèle", "template-name": "Nom du modèle", "template-required": "Le modèle est requis", "template-type": { "alarm": "Alarme", "alarm-assignment": "Attribution d'alarme", - "alarm-comment": "Commentaire d'alarme", + "alarm-comment": "Commentaire sur l'alarme", "api-usage-limit": "Limite d'utilisation de l'API", "device-activity": "Activité de l'appareil", "entities-limit": "Limite d'entités", @@ -4171,10 +4190,10 @@ "rule-engine-lifecycle-event": "Événement du cycle de vie du moteur de règles", "rule-node": "Nœud de règle", "new-platform-version": "Nouvelle version de la plateforme", - "rate-limits": "Limites de débit dépassées", - "edge-communication-failure": "Échec de communication Edge", + "rate-limits": "Limites dépassées", + "edge-communication-failure": "Échec de communication avec l'Edge", "edge-connection": "Connexion Edge", - "task-processing-failure": "Échec du traitement de la tâche", + "task-processing-failure": "Échec du traitement de tâche", "resources-shortage": "Pénurie de ressources" }, "templates": "Modèles", @@ -4188,17 +4207,17 @@ "trigger": { "alarm": "Alarme", "alarm-assignment": "Attribution d'alarme", - "alarm-comment": "Commentaire d'alarme", + "alarm-comment": "Commentaire sur l'alarme", "api-usage-limit": "Limite d'utilisation de l'API", "device-activity": "Activité de l'appareil", "entities-limit": "Limite d'entités", "entity-action": "Action sur l'entité", "rule-engine-lifecycle-event": "Événement du cycle de vie du moteur de règles", "new-platform-version": "Nouvelle version de la plateforme", - "rate-limits": "Limites de débit dépassées", + "rate-limits": "Limites dépassées", "edge-connection": "Connexion Edge", - "edge-communication-failure": "Échec de communication Edge", - "task-processing-failure": "Échec du traitement de la tâche", + "edge-communication-failure": "Échec de communication avec l'Edge", + "task-processing-failure": "Échec du traitement de tâche", "resources-shortage": "Pénurie de ressources", "trigger": "Déclencheur", "trigger-required": "Le déclencheur est requis" @@ -4229,21 +4248,21 @@ } }, "ota-update": { - "add": "Ajouter un paquet", - "assign-firmware": "Micrologiciel assigné", - "assign-firmware-required": "Le micrologiciel assigné est requis", + "add": "Ajouter un package", + "assign-firmware": "Microprogramme assigné", + "assign-firmware-required": "Le microprogramme assigné est requis", "assign-software": "Logiciel assigné", "assign-software-required": "Le logiciel assigné est requis", - "auto-generate-checksum": "Générer automatiquement la somme de contrôle", - "checksum": "Somme de contrôle", - "checksum-hint": "Si la somme de contrôle est vide, elle sera générée automatiquement", - "checksum-algorithm": "Algorithme de somme de contrôle", - "checksum-copied-message": "La somme de contrôle du paquet a été copiée dans le presse-papiers", - "change-firmware": "Changer le micrologiciel peut entraîner la mise à jour de { count, plural, =1 {1 appareil} other {# appareils} }.", - "change-software": "Changer le logiciel peut entraîner la mise à jour de { count, plural, =1 {1 appareil} other {# appareils} }.", + "auto-generate-checksum": "Générer automatiquement le checksum", + "checksum": "Checksum", + "checksum-hint": "Si le checksum est vide, il sera généré automatiquement", + "checksum-algorithm": "Algorithme de checksum", + "checksum-copied-message": "Le checksum du package a été copié dans le presse-papiers", + "change-firmware": "La modification du microprogramme peut entraîner la mise à jour de { count, plural, =1 {1 appareil} other {# appareils} }.", + "change-software": "La modification du logiciel peut entraîner la mise à jour de { count, plural, =1 {1 appareil} other {# appareils} }.", "change-ota-setting-title": "Êtes-vous sûr de vouloir modifier les paramètres OTA ?", - "chose-compatible-device-profile": "Le paquet téléchargé ne sera disponible que pour les appareils ayant le profil choisi.", - "chose-firmware-distributed-device": "Choisissez le micrologiciel à distribuer aux appareils", + "chose-compatible-device-profile": "Le package importé sera disponible uniquement pour les appareils ayant le profil sélectionné.", + "chose-firmware-distributed-device": "Choisissez le microprogramme à distribuer aux appareils", "chose-software-distributed-device": "Choisissez le logiciel à distribuer aux appareils", "content-type": "Type de contenu", "copy-checksum": "Copier la somme de contrôle", @@ -4308,9 +4327,9 @@ "current-password": "Mot de passe actuel", "copy-jwt-token": "Copier le jeton JWT", "jwt-token": "Jeton JWT", - "token-valid-till": "Jeton valide jusqu'à", + "token-valid-till": "Le jeton est valide jusqu'au", "tokenCopiedSuccessMessage": "Le jeton JWT a été copié dans le presse-papiers", - "tokenCopiedWarnMessage": "Le jeton JWT est expiré ! Veuillez actualiser la page." + "tokenCopiedWarnMessage": "Le jeton JWT est expiré ! Veuillez rafraîchir la page." }, "profiles": { "profiles": "Profils" @@ -4334,34 +4353,34 @@ "get-new-code": "Obtenir un nouveau code", "main-2fa-method": "Utiliser comme méthode principale d'authentification à deux facteurs", "dialog": { - "activation-step-description-email": "Lors de votre prochaine connexion, un code de sécurité sera envoyé à votre adresse email.", - "activation-step-description-sms": "Lors de votre prochaine connexion, un code de sécurité sera envoyé au numéro de téléphone.", + "activation-step-description-email": "Lors de votre prochaine connexion, un code de sécurité vous sera demandé. Il sera envoyé à votre adresse e-mail.", + "activation-step-description-sms": "Lors de votre prochaine connexion, un code de sécurité vous sera demandé. Il sera envoyé à votre numéro de téléphone.", "activation-step-description-totp": "Lors de votre prochaine connexion, vous devrez fournir un code d'authentification à deux facteurs.", "activation-step-label": "Activation", - "backup-code-description": "Imprimez ces codes pour les avoir à portée de main lorsque vous devrez vous connecter. Chaque code peut être utilisé une seule fois.", - "backup-code-warn": "Une fois que vous quittez cette page, ces codes ne pourront plus être affichés. Conservez-les en toute sécurité à l'aide des options ci-dessous.", + "backup-code-description": "Imprimez ces codes afin de les avoir à portée de main lorsque vous devrez vous connecter à votre compte. Chaque code de secours ne peut être utilisé qu'une seule fois.", + "backup-code-warn": "Une fois cette page quittée, ces codes ne pourront plus être affichés. Conservez-les en toute sécurité en utilisant les options ci-dessous.", "download-txt": "Télécharger (txt)", - "email-step-description": "Saisissez une adresse email à utiliser comme méthode d'authentification.", - "email-step-label": "Email", - "enable-email-title": "Activer l'authentification par email", - "enable-sms-title": "Activer l'authentification par SMS", - "enable-totp-title": "Activer l'application d'authentification", - "enter-verification-code": "Entrez le code à 6 chiffres ici", + "email-step-description": "Saisissez une adresse e-mail à utiliser comme méthode d’authentification.", + "email-step-label": "E-mail", + "enable-email-title": "Activer l’authentification par e-mail", + "enable-sms-title": "Activer l’authentification par SMS", + "enable-totp-title": "Activer l’application d’authentification", + "enter-verification-code": "Saisissez le code à 6 chiffres ici", "get-backup-code-title": "Obtenir le code de secours", "next": "Suivant", - "scan-qr-code": "Scannez ce code QR avec votre application d'authentification", + "scan-qr-code": "Scannez ce QR code avec votre application d’authentification", "send-code": "Envoyer le code", - "sms-step-description": "Saisissez un numéro de téléphone à utiliser comme méthode d'authentification.", + "sms-step-description": "Saisissez un numéro de téléphone à utiliser comme méthode d’authentification.", "sms-step-label": "Numéro de téléphone", "success": "Succès !", "totp-step-description-install": "Vous pouvez installer des applications comme Google Authenticator, Authy ou Duo.", - "totp-step-description-open": "Ouvrez l'application d'authentification sur votre téléphone mobile.", - "totp-step-label": "Obtenir l'application", + "totp-step-description-open": "Ouvrez l’application d’authentification sur votre téléphone mobile.", + "totp-step-label": "Obtenir l’application", "verification-code": "Code à 6 chiffres", "verification-code-invalid": "Format de code de vérification invalide", "verification-code-incorrect": "Code de vérification incorrect", - "verification-code-many-request": "Trop de requêtes. Vérifiez le code de vérification", - "verification-step-description": "Entrez un code à 6 chiffres que nous venons d'envoyer à {{address}}", + "verification-code-many-request": "Trop de demandes – vérifiez le code", + "verification-step-description": "Saisissez le code à 6 chiffres que nous venons d’envoyer à {{address}}", "verification-step-label": "Vérification" }, "provider": { @@ -4438,8 +4457,8 @@ "any-relation": "Toute relation", "relation-filters": "Filtres de relation", "relation-filter": "Filtre de relation", - "additional-info": "Infos supplémentaires (JSON)", - "invalid-additional-info": "Impossible d'analyser le JSON des infos supplémentaires.", + "additional-info": "Informations supplémentaires (JSON)", + "invalid-additional-info": "Impossible d’analyser le JSON des informations supplémentaires.", "no-relations-text": "Aucune relation trouvée", "not": "Non" }, @@ -4448,20 +4467,20 @@ "all-types": "Tous", "copyId": "Copier l'identifiant de la ressource", "delete": "Supprimer la ressource", - "delete-resource-text": "Attention, après confirmation, la ressource ne pourra pas être récupérée.", + "delete-resource-text": "Attention, après confirmation, la ressource sera irrécupérable.", "delete-resource-title": "Êtes-vous sûr de vouloir supprimer la ressource '{{resourceTitle}}' ?", "delete-resources-action-title": "Supprimer { count, plural, =1 {1 ressource} other {# ressources} }", - "delete-resources-text": "Veuillez noter que les ressources sélectionnées, même si elles sont utilisées dans les profils de périphériques, seront supprimées.", + "delete-resources-text": "Veuillez noter que les ressources sélectionnées, même si elles sont utilisées dans les profils d'appareil, seront supprimées.", "delete-resources-title": "Êtes-vous sûr de vouloir supprimer { count, plural, =1 {1 ressource} other {# ressources} } ?", "download": "Télécharger la ressource", - "drop-file": "Déposez un fichier ressource ou cliquez pour en sélectionner un à télécharger.", - "drop-resource-file-or": "Glissez et déposez un fichier ressource ou", - "empty": "Ressource vide", + "drop-file": "Déposez un fichier ressource ou cliquez pour en sélectionner un à téléverser.", + "drop-resource-file-or": "Glissez-déposez un fichier ressource ou", + "empty": "La ressource est vide", "file-name": "Nom du fichier", "idCopiedMessage": "L'identifiant de la ressource a été copié dans le presse-papiers", - "no-resource-matching": "Aucune ressource correspondant à '{{widgetsBundle}}' n'a été trouvée.", + "no-resource-matching": "Aucune ressource correspondant à '{{widgetsBundle}}' n’a été trouvée.", "no-resource-text": "Aucune ressource trouvée", - "open-widgets-bundle": "Ouvrir la collection de widgets", + "open-widgets-bundle": "Ouvrir le bundle de widgets", "resource": "Ressource", "resource-file": "Fichier ressource", "resource-files": "Fichiers ressource", @@ -4478,15 +4497,21 @@ "jks": "JKS", "js-module": "Module JS", "lwm2m-model": "Modèle LWM2M", - "pkcs-12": "PKCS #12" + "pkcs-12": "PKCS #12", + "general": "Général" }, "resource-sub-type": "Sous-type", "sub-type": { - "image": "Image", + "image": "image", "scada-symbol": "Symbole SCADA", "extension": "Extension", "module": "Module" - } + }, + "resource-is-in-use": "La ressource est utilisée par d'autres entités", + "resources-are-in-use": "Les ressources sont utilisées par d'autres entités", + "resource-is-in-use-text": "La ressource '{{title}}' n'a pas été supprimée car elle est utilisée par les entités suivantes :", + "resources-are-in-use-text": "Toutes les ressources n'ont pas été supprimées car elles sont utilisées par d'autres entités.
Vous pouvez consulter les entités référencées en cliquant sur le bouton Références dans la ligne correspondante.
Si vous souhaitez tout de même supprimer ces ressources, sélectionnez-les dans le tableau ci-dessous et cliquez sur le bouton Supprimer la sélection.", + "delete-resource-in-use-text": "Si vous souhaitez tout de même supprimer la ressource, cliquez sur le bouton Supprimer quand même." }, "javascript": { "add": "Ajouter une ressource JavaScript", @@ -4517,9 +4542,9 @@ }, "rpc": { "error": { - "target-device-is-not-set": "Le périphérique cible n'est pas défini !", + "target-device-is-not-set": "L'appareil cible n'est pas défini !", "invalid-target-entity": "Les commandes RPC ne sont pas prises en charge par l'entité {{entityType}}.", - "failed-to-resolve-target-device": "Échec de résolution du périphérique cible !", + "failed-to-resolve-target-device": "Échec de résolution de l’appareil cible !", "request-timeout": "Délai d'attente de la requête dépassé", "rpc-http-error": "Erreur : {{status}} - {{statusText}}" } @@ -4668,9 +4693,9 @@ "advanced-settings": "Paramètres avancés", "create-entity-if-not-exists": "Créer une entité si elle n'existe pas", "create-entity-if-not-exists-hint": "Si activé, une nouvelle entité avec les paramètres spécifiés sera créée à moins qu'elle n'existe déjà. Les entités existantes seront utilisées telles quelles pour la relation.", - "select-device-connectivity-event": "Sélectionner un événement de connectivité du dispositif", + "select-device-connectivity-event": "Sélectionner un événement de connectivité de l’appareil", "entity-name-pattern": "Modèle de nom", - "device-name-pattern": "Nom du dispositif", + "device-name-pattern": "Nom de l’appareil", "asset-name-pattern": "Nom de l'actif", "entity-view-name-pattern": "Nom de la vue d'entité", "customer-title-pattern": "Titre du client", @@ -4736,7 +4761,7 @@ "attributes-scope-value": "Valeur de la portée des attributs", "attributes-scope-value-copy": "Copier la valeur de portée des attributs", "attributes-scope-hint": "Utilisez la clé de métadonnée 'scope' pour définir dynamiquement la portée par message. Cela remplace la portée définie dans la configuration.", - "notify-device": "Forcer la notification au dispositif", + "notify-device": "Forcer la notification à l’appareil", "send-attributes-updated-notification": "Envoyer une notification d’attributs mis à jour", "send-attributes-updated-notification-hint": "Envoyer une notification sur les attributs mis à jour comme message séparé à la file du moteur de règles.", "send-attributes-deleted-notification": "Envoyer une notification d’attributs supprimés", @@ -4745,8 +4770,8 @@ "update-attributes-only-on-value-change-hint": "Met à jour les attributs à chaque message entrant, même si leur valeur n’a pas changé. Cela augmente l’usage de l’API et réduit les performances.", "update-attributes-only-on-value-change-hint-enabled": "Met à jour les attributs uniquement si leur valeur a changé. Si aucune modification, aucune mise à jour ni notification ne sera envoyée.", "fetch-credentials-to-metadata": "Transférer les identifiants dans les métadonnées", - "notify-device-on-update-hint": "Si activé, force la notification au dispositif lors de la mise à jour des attributs partagés. Sinon, contrôlé via le paramètre 'notifyDevice' dans les métadonnées du message.", - "notify-device-on-delete-hint": "Si activé, force la notification au dispositif lors de la suppression des attributs partagés. Sinon, contrôlé via 'notifyDevice' dans les métadonnées du message.", + "notify-device-on-update-hint": "Si activé, force la notification à l’appareil lors de la mise à jour des attributs partagés. Sinon, contrôlé via le paramètre 'notifyDevice' dans les métadonnées du message.", + "notify-device-on-delete-hint": "Si activé, force la notification à l’appareil lors de la suppression des attributs partagés. Sinon, contrôlé via 'notifyDevice' dans les métadonnées du message.", "latest-timeseries": "Clés de données de séries temporelles récentes", "timeseries-keys": "Clés de séries temporelles", "timeseries-keys-required": "Au moins une clé de série temporelle doit être sélectionnée.", @@ -4799,7 +4824,7 @@ "json-path-expression-required": "L'expression JSONPath est requise", "json-path-expression-hint": "JSONPath indique un chemin vers un ou plusieurs éléments dans une structure JSON. '$' représente la racine.", "relations-query": "Requête sur les relations", - "device-relations-query": "Requête sur les relations du dispositif", + "device-relations-query": "Requête sur les relations de l’appareil", "max-relation-level": "Niveau de relation max.", "max-relation-level-error": "La valeur doit être supérieure à 0 ou non définie.", "max-relation-level-invalid": "La valeur doit être un entier.", @@ -4932,23 +4957,23 @@ "use-simple-client-http-factory": "Utiliser une fabrique HTTP client simple", "ignore-request-body": "Sans corps de requête", "parse-to-plain-text": "Analyser en texte brut", - "parse-to-plain-text-hint": "Si sélectionné, le corps du message sera converti de chaîne JSON en texte brut, par exemple msg = \"Hello,\\t\"world\"\" devient Hello, \"world\"", - "read-timeout": "Délai de lecture (ms)", - "read-timeout-hint": "Une valeur de 0 signifie un délai d'expiration infini", - "max-parallel-requests-count": "Nombre maximal de requêtes parallèles", - "max-parallel-requests-count-hint": "Une valeur de 0 signifie qu'il n'y a pas de limite de traitement parallèle", - "max-response-size": "Taille maximale de réponse (en Ko)", - "max-response-size-hint": "Quantité maximale de mémoire utilisée pour le tampon lors du décodage/encodage des messages HTTP comme les charges JSON ou XML", + "parse-to-plain-text-hint": "Si sélectionné, le corps du message de la requête sera transformé d'une chaîne JSON en texte brut, par exemple : msg = \"Hello,\\t\"world\"\" sera analysé comme Hello, \"world\"", + "read-timeout": "Délai de lecture en millisecondes", + "read-timeout-hint": "La valeur 0 signifie un délai illimité", + "max-parallel-requests-count": "Nombre max. de requêtes parallèles", + "max-parallel-requests-count-hint": "La valeur 0 indique qu'il n'y a pas de limite au traitement parallèle", + "max-response-size": "Taille max. de la réponse (en Ko)", + "max-response-size-hint": "Quantité maximale de mémoire allouée pour le tampon de données lors du décodage ou de l'encodage des messages HTTP, tels que les charges utiles JSON ou XML", "headers": "En-têtes", - "headers-hint": "Utilisez ${metadataKey} pour une valeur provenant des métadonnées, $[messageKey] pour une valeur provenant du corps du message dans les champs en-tête/valeur", + "headers-hint": "Utilisez ${metadataKey} pour une valeur issue des métadonnées, $[messageKey] pour une valeur issue du corps du message dans les champs en-tête/valeur", "header": "En-tête", - "header-required": "L'en-tête est requis", + "header-required": "L’en-tête est requis", "value": "Valeur", "value-required": "La valeur est requise", - "topic-pattern": "Motif de sujet", - "key-pattern": "Motif de clé", - "key-pattern-hint": "Facultatif. Si une partition est précisée, elle sera utilisée. Sinon, la clé est utilisée. Sans clé, un round-robin sera appliqué.", - "topic-pattern-required": "Le motif de sujet est requis", + "topic-pattern": "Modèle de sujet", + "key-pattern": "Modèle de clé", + "key-pattern-hint": "Optionnel. Si un numéro de partition valide est spécifié, il sera utilisé lors de l'envoi de l'enregistrement. Si aucune partition n'est spécifiée, la clé sera utilisée. Sinon, une partition sera assignée en mode round-robin.", + "topic-pattern-required": "Le modèle de sujet est requis", "topic": "Sujet", "topic-required": "Le sujet est requis", "bootstrap-servers": "Serveurs bootstrap", @@ -5008,16 +5033,16 @@ "pubsub-topic-name": "Nom du sujet", "pubsub-topic-name-required": "Le nom du sujet est requis", "message-attributes": "Attributs du message", - "message-attributes-hint": "Utilisez ${metadataKey} pour une valeur provenant des métadonnées, $[messageKey] pour une valeur provenant du corps du message dans les champs nom/valeur", - "connect-timeout": "Délai de connexion (s)", + "message-attributes-hint": "Utilisez ${metadataKey} pour une valeur issue des métadonnées, $[messageKey] pour une valeur issue du corps du message dans les champs nom/valeur", + "connect-timeout": "Délai de connexion (sec)", "connect-timeout-required": "Le délai de connexion est requis.", "connect-timeout-range": "Le délai de connexion doit être compris entre 1 et 200.", "client-id": "ID client", - "client-id-hint": "Optionnel. Laissez vide pour un ID client généré automatiquement. Si vous utilisez un ID explicite, veillez à ce qu'il soit unique, surtout en mode micro-services.", - "append-client-id-suffix": "Ajouter l'ID du service comme suffixe à l'ID client", - "client-id-suffix-hint": "Optionnel. Appliqué si un ID client est défini. Ajoute l'ID de service comme suffixe pour éviter les conflits en mode micro-services.", - "device-id": "ID de l'appareil", - "device-id-required": "L'ID de l'appareil est requis.", + "client-id-hint": "Optionnel. Laissez vide pour générer automatiquement un ID client. Attention : la plupart des brokers MQTT n’autorisent pas plusieurs connexions avec le même ID client. Pour se connecter à de tels brokers, votre ID client MQTT doit être unique. Si la plateforme fonctionne en mode microservices, une copie du nœud de règle est lancée dans chaque microservice. Cela entraînera automatiquement plusieurs clients MQTT avec le même ID, ce qui peut provoquer des échecs du nœud de règle. Pour éviter ces échecs, activez l’option \"Ajouter l’ID de service comme suffixe à l’ID client\" ci-dessous.", + "append-client-id-suffix": "Ajouter l’ID de service comme suffixe à l’ID client", + "client-id-suffix-hint": "Optionnel. Appliqué lorsque \"Client ID\" est spécifié explicitement. Si sélectionné, l'ID du service sera ajouté en suffixe à l'ID client. Permet d'éviter les défaillances lorsque la plateforme fonctionne en mode microservices.", + "device-id": "ID de l’appareil", + "device-id-required": "L’ID de l’appareil est requis.", "clean-session": "Session propre", "enable-ssl": "Activer SSL", "credentials": "Identifiants", @@ -5026,8 +5051,8 @@ "credentials-anonymous": "Anonyme", "credentials-basic": "Basique", "credentials-pem": "PEM", - "credentials-pem-hint": "Au moins un fichier de certificat CA serveur ou une paire certificat client + clé privée client est requis", - "credentials-sas": "Signature d'accès partagé", + "credentials-pem-hint": "Au minimum, un fichier de certificat CA serveur ou une paire de fichiers de certificat client et de clé privée client sont requis", + "credentials-sas": "Signature d'accès partagé (SAS)", "sas-key": "Clé SAS", "sas-key-required": "La clé SAS est requise.", "hostname": "Nom d'hôte", @@ -5041,25 +5066,25 @@ "no-file": "Aucun fichier sélectionné.", "drop-file": "Déposez un fichier ou cliquez pour en sélectionner un à téléverser.", "private-key-password": "Mot de passe de la clé privée", - "use-system-smtp-settings": "Utiliser les paramètres SMTP système", + "use-system-smtp-settings": "Utiliser les paramètres SMTP du système", "use-metadata-dynamic-interval": "Utiliser un intervalle dynamique", - "metadata-dynamic-interval-hint": "Les champs de début et fin d’intervalle supportent la templatization. Valeurs en millisecondes. Utilisez $[messageKey] ou ${metadataKey}.", - "use-metadata-interval-patterns-hint": "Si sélectionné, le nœud utilise les motifs d’intervalle de début/fin du message ou des métadonnées en millisecondes.", + "metadata-dynamic-interval-hint": "Les champs de saisie de début et de fin d'intervalle prennent en charge la templatisation. Notez que la valeur du modèle substitué doit être définie en millisecondes. Utilisez $[messageKey] pour extraire la valeur du message et ${metadataKey} pour extraire la valeur des métadonnées.", + "use-metadata-interval-patterns-hint": "Si sélectionné, le nœud de règle utilise les modèles d'intervalle de début et de fin provenant des métadonnées ou des données du message, en supposant que les intervalles sont en millisecondes.", "use-message-alarm-data": "Utiliser les données d'alarme du message", "overwrite-alarm-details": "Écraser les détails de l'alarme", - "use-alarm-severity-pattern": "Utiliser un motif de sévérité d'alarme", - "check-all-keys": "Vérifier que tous les champs sont présents", - "check-all-keys-hint": "Vérifie la présence de toutes les clés spécifiées dans les données et les métadonnées.", + "use-alarm-severity-pattern": "Utiliser le modèle de gravité de l'alarme", + "check-all-keys": "Vérifier que tous les champs spécifiés sont présents", + "check-all-keys-hint": "Si sélectionné, vérifie que toutes les clés spécifiées sont présentes dans les données et métadonnées du message.", "check-relation-to-specific-entity": "Vérifier la relation avec une entité spécifique", - "check-relation-to-specific-entity-tooltip": "Si activé, vérifie la relation avec une entité spécifique, sinon avec n'importe quelle entité selon direction/type.", - "check-relation-hint": "Vérifie la relation avec une entité (spécifique ou non) selon direction/type.", + "check-relation-to-specific-entity-tooltip": "Si activé, vérifie la présence d'une relation avec une entité spécifique, sinon, vérifie la relation avec n'importe quelle entité. Dans les deux cas, la recherche de relation est basée sur la direction et le type configurés.", + "check-relation-hint": "Vérifie l'existence d'une relation avec une entité spécifique ou avec n'importe quelle entité selon la direction et le type de relation.", "delete-relation-with-specific-entity": "Supprimer la relation avec une entité spécifique", - "delete-relation-with-specific-entity-hint": "Supprime uniquement la relation avec une entité spécifique. Sinon, supprime toutes les relations correspondantes.", - "delete-relation-hint": "Supprime la relation de l'origine du message vers une ou plusieurs entités selon direction/type.", + "delete-relation-with-specific-entity-hint": "Si activé, supprimera uniquement la relation avec une entité spécifique. Sinon, la relation sera supprimée avec toutes les entités correspondantes.", + "delete-relation-hint": "Supprime la relation de l'initiateur du message entrant vers l'entité ou la liste d'entités spécifiées selon la direction et le type.", "remove-current-relations": "Supprimer les relations actuelles", - "remove-current-relations-hint": "Supprime les relations actuelles de l'origine du message selon direction/type.", - "change-originator-to-related-entity": "Changer l'origine en une entité liée", - "change-originator-to-related-entity-hint": "Permet de traiter un message comme venant d'une autre entité.", + "remove-current-relations-hint": "Supprime les relations actuelles de l'initiateur du message entrant en fonction de la direction et du type.", + "change-originator-to-related-entity": "Changer l'initiateur en entité liée", + "change-originator-to-related-entity-hint": "Utilisé pour traiter le message soumis comme s'il provenait d'une autre entité.", "start-interval": "Début de l'intervalle", "end-interval": "Fin de l'intervalle", "start-interval-required": "Le début de l'intervalle est requis.", @@ -5119,15 +5144,15 @@ "email-sender": "Expéditeur de l'email", "fields-to-check": "Champs à vérifier", "add-detail": "Ajouter un détail", - "check-all-keys-tooltip": "Si activé, vérifie la présence de tous les champs listés dans les données et métadonnées du message entrant.", - "fields-to-check-hint": "Appuyez sur \"Entrée\" pour valider la saisie. Champs multiples supportés.", + "check-all-keys-tooltip": "Si activé, vérifie la présence de tous les champs répertoriés dans les noms de champs du message et des métadonnées dans le message entrant et ses métadonnées.", + "fields-to-check-hint": "Appuyez sur \"Entrée\" pour compléter la saisie du nom du champ. Plusieurs noms de champs sont supportés.", "entity-details-list-empty": "Au moins un détail doit être sélectionné.", - "alarm-status": "Statut d'alarme", + "alarm-status": "Statut de l'alarme", "alarm-required": "Au moins un statut d'alarme doit être sélectionné.", "no-entity-details-matching": "Aucun détail d'entité correspondant trouvé.", - "custom-table-name": "Nom de table personnalisé", + "custom-table-name": "Nom de la table personnalisée", "custom-table-name-required": "Le nom de la table est requis", - "custom-table-hint": "La table doit être créée dans votre cluster Cassandra et commencer par 'cs_tb_'. Entrez ici le nom sans le préfixe.", + "custom-table-hint": "La table doit être créée dans votre cluster Cassandra et son nom doit commencer par le préfixe 'cs_tb_' pour éviter l'insertion de données dans les tables communes de TB. Entrez ici le nom de la table sans le préfixe 'cs_tb_'.", "message-field": "Champ du message", "message-field-required": "Le champ du message est requis.", "table-col": "Colonne de la table", @@ -5136,8 +5161,8 @@ "longitude-field-name": "Nom du champ de longitude", "latitude-field-name-required": "Le nom du champ de latitude est requis.", "longitude-field-name-required": "Le nom du champ de longitude est requis.", - "fetch-perimeter-info-from-metadata": "Extraire les infos de périmètre depuis les métadonnées", - "fetch-perimeter-info-from-metadata-tooltip": "Si le type de périmètre est 'Polygone', la valeur du champ '{{perimeterKeyName}}' est utilisée telle quelle. Pour 'Cercle', elle est analysée pour extraire latitude, longitude, rayon et unité.", + "fetch-perimeter-info-from-metadata": "Récupérer les informations de périmètre à partir des métadonnées", + "fetch-perimeter-info-from-metadata-tooltip": "Si le type de périmètre est défini sur 'Polygon', la valeur du champ de métadonnées '{{perimeterKeyName}}' sera utilisée comme définition du périmètre sans analyse supplémentaire de la valeur. Sinon, si le type de périmètre est défini sur 'Circle', la valeur du champ de métadonnées '{{perimeterKeyName}}' sera analysée pour extraire les champs 'latitude', 'longitude', 'radius', 'radiusUnit' qui sont utilisés pour la définition du périmètre circulaire.", "perimeter-key-name": "Nom de clé de périmètre", "perimeter-key-name-hint": "Nom du champ de métadonnées contenant les infos de périmètre.", "perimeter-key-name-required": "Le nom de la clé de périmètre est requis.", @@ -5169,7 +5194,7 @@ "tell-failure-if-absent": "Indiquer un échec", "tell-failure-if-absent-hint": "Si au moins une clé sélectionnée est absente, le message sortant signalera une \"Échec\".", "get-latest-value-with-ts": "Récupérer l’horodatage des dernières valeurs", - "get-latest-value-with-ts-hint": "Inclura l'horodatage dans les valeurs télémétriques, ex : \"temp\": {\"ts\":1574329385897, \"value\":42}", + "get-latest-value-with-ts-hint": "Inclura l'horodatage dans les valeurs télémétriques, ex : \"temp\": \"{\"ts\":1574329385897, \"value\":42}\"", "ignore-null-strings": "Ignorer les chaînes nulles", "ignore-null-strings-hint": "Ignore les champs avec valeur vide.", "add-metadata-key-values-as-kafka-headers": "Ajouter les métadonnées comme en-têtes Kafka", @@ -5197,18 +5222,18 @@ "failure-if-delta-negative": "Signaler un échec si le delta est négatif", "failure-if-delta-negative-tooltip": "Force l’échec du traitement si la valeur delta est négative.", "use-caching": "Utiliser le cache", - "use-caching-tooltip": "Met en cache la valeur de \"{{inputValueKey}}\" depuis le message entrant pour améliorer la performance. Le cache ne sera pas mis à jour si la valeur est modifiée ailleurs.", + "use-caching-tooltip": "Le nœud de règle mettra en cache la valeur de \"{{inputValueKey}}\" qui arrive du message entrant pour améliorer les performances. Notez que le cache ne sera pas mis à jour si vous modifiez la valeur de \"{{inputValueKey}}\" ailleurs.", "add-time-difference-between-readings": "Ajouter la différence de temps entre les lectures de \"{{inputValueKey}}\"", - "add-time-difference-between-readings-tooltip": "Ajoute la clé \"{{periodValueKey}}\" au message sortant si activé.", - "period-value-key": "Clé de la période", - "period-value-key-required": "La clé de la période est requise.", - "general-pattern-hint": "Utilisez ${metadataKey} pour les métadonnées, $[messageKey] pour le corps du message.", - "alarm-severity-pattern-hint": "Utilisez ${metadataKey} pour une valeur provenant des métadonnées, $[messageKey] pour une valeur provenant du corps du message. La gravité de l'alarme doit être un niveau système (CRITICAL, MAJOR, etc.)", - "output-node-name-hint": "Le nom du nœud correspond au type de relation du message de sortie.", - "use-server-ts": "Utiliser l’horodatage serveur", - "use-server-ts-hint": "Utilise le temps actuel du serveur pour les séries temporelles sans horodatage explicite.", - "kv-map-pattern-hint": "Tous les champs d’entrée supportent la templatization.", - "kv-map-single-pattern-hint": "Le champ d’entrée supporte la templatization.", + "add-time-difference-between-readings-tooltip": "Si activé, le nœud de règle ajoutera le \"{{periodValueKey}}\" au message sortant.", + "period-value-key": "Clé de la valeur de la période", + "period-value-key-required": "La clé de la valeur de la période est requise.", + "general-pattern-hint": "Utilisez ${metadataKey} pour la valeur provenant des métadonnées, $[messageKey] pour la valeur provenant du corps du message.", + "alarm-severity-pattern-hint": "Utilisez ${metadataKey} pour la valeur provenant des métadonnées, $[messageKey] pour la valeur provenant du corps du message. La gravité de l'alarme doit être du système (CRITICAL, MAJOR, etc.).", + "output-node-name-hint": "Le nom du nœud de règle correspond au type de relation du message sortant, et il est utilisé pour transmettre les messages à d'autres nœuds de règle dans la chaîne de règles appelante.", + "use-server-ts": "Utiliser le timestamp du serveur", + "use-server-ts-hint": "Utilisez le timestamp actuel du serveur pour les données de séries temporelles qui n'ont pas de timestamp explicite. Cela permet de maintenir un ordre correct lors du traitement des messages provenant de plusieurs sources ou lorsque les messages arrivent dans un ordre incorrect.", + "kv-map-pattern-hint": "Tous les champs d'entrée prennent en charge la templatisation. Utilisez $[messageKey] pour extraire la valeur du message et ${metadataKey} pour extraire la valeur des métadonnées.", + "kv-map-single-pattern-hint": "Le champ d'entrée prend en charge la templatisation. Utilisez $[messageKey] pour extraire la valeur du message et ${metadataKey} pour extraire la valeur des métadonnées.", "shared-scope": "Portée partagée", "server-scope": "Portée serveur", "client-scope": "Portée client", @@ -5244,7 +5269,7 @@ "type-field-input-required": "Le type est requis.", "key-field-input": "Clé", "add-entity-type": "Ajouter un type d'entité", - "add-device-profile": "Ajouter un profil de périphérique", + "add-device-profile": "Ajouter un profil d'appareil", "key-field-input-required": "La clé est requise.", "number-floating-point-field-input": "Nombre de chiffres après la virgule", "number-floating-point-field-input-hint": "Utilisez 0 pour convertir en entier", @@ -5270,20 +5295,20 @@ "presence-monitoring-strategy": "Stratégie de suivi de présence", "presence-monitoring-strategy-on-first-message": "Au premier message", "presence-monitoring-strategy-on-each-message": "À chaque message", - "presence-monitoring-strategy-on-first-message-hint": "Signale 'Inside' ou 'Outside' au premier message après une durée minimale depuis la dernière mise à jour.", - "presence-monitoring-strategy-on-each-message-hint": "Signale 'Inside' ou 'Outside' à chaque message après une mise à jour.", - "fetch-credentials-to": "Extraire les identifiants vers", - "add-originator-attributes-to": "Ajouter les attributs de l’origine à", - "originator-attributes": "Attributs de l’origine", - "fetch-latest-telemetry-with-timestamp": "Extraire la dernière télémétrie avec horodatage", - "fetch-latest-telemetry-with-timestamp-tooltip": "Ajoute l'horodatage dans les métadonnées, ex: \"{{latestTsKeyName}}\": \"{\"ts\":1574329385897, \"value\":42}\"", - "tell-failure": "Signaler un échec si un attribut est manquant", - "tell-failure-tooltip": "Si une des clés n’existe pas, le message signalera un échec.", - "created-time": "Date de création", - "chip-help": "Appuyez sur 'Entrée' pour valider {{inputName}}. \nAppuyez sur 'Retour arrière' pour supprimer. \nValeurs multiples supportées.", + "presence-monitoring-strategy-on-first-message-hint": "Signale le statut de présence 'À l'intérieur' ou 'À l'extérieur' lors du premier message après que la durée minimale configurée soit écoulée depuis la dernière mise à jour du statut de présence 'Entré' ou 'Parti'.", + "presence-monitoring-strategy-on-each-message-hint": "Signale le statut de présence 'À l'intérieur' ou 'À l'extérieur' à chaque message après la mise à jour du statut de présence 'Entré' ou 'Parti'.", + "fetch-credentials-to": "Récupérer les identifiants pour", + "add-originator-attributes-to": "Ajouter les attributs de l'initiateur à", + "originator-attributes": "Attributs de l'initiateur", + "fetch-latest-telemetry-with-timestamp": "Récupérer la dernière télémétrie avec timestamp", + "fetch-latest-telemetry-with-timestamp-tooltip": "Si activé, les dernières valeurs de télémétrie seront ajoutées aux métadonnées sortantes avec un timestamp, par exemple : \"{{latestTsKeyName}}\": \"{\"ts\":1574329385897, \"value\":42}\"", + "tell-failure": "Signaler une erreur si l'un des attributs est manquant", + "tell-failure-tooltip": "Si au moins une clé sélectionnée n'existe pas, le message sortant signalera \"Échec\".", + "created-time": "Heure de création", + "chip-help": "Appuyez sur 'Entrée' pour compléter la saisie de {{inputName}}. \nAppuyez sur 'Retour arrière' pour supprimer {{inputName}}. \nPlusieurs valeurs sont supportées.", "detail": "détail", "field-name": "Nom du champ", - "device-profile": "Profil de périphérique", + "device-profile": "Profil d'appareil", "entity-type": "Type d'entité", "message-type": "Type de message", "timeseries-key": "Clé de série temporelle", @@ -5295,15 +5320,15 @@ "add-mapped-originator-fields-to": "Ajouter les champs de l’origine mappés à", "fields": "Champs", "skip-empty-fields": "Ignorer les champs vides", - "skip-empty-fields-tooltip": "Les champs vides ne seront pas ajoutés au message de sortie ou aux métadonnées de sortie.", + "skip-empty-fields-tooltip": "Les champs avec des valeurs vides ne seront pas ajoutés au message de sortie/métadonnées de sortie.", "fetch-interval": "Intervalle de récupération", "fetch-strategy": "Stratégie de récupération", - "fetch-timeseries-from-to": "Récupérer les séries temporelles de {{startInterval}} {{startIntervalTimeUnit}} en arrière jusqu'à {{endInterval}} {{endIntervalTimeUnit}} en arrière.", - "fetch-timeseries-from-to-invalid": "Récupération des séries temporelles invalide (\"Début de l'intervalle\" doit être inférieur à \"Fin de l'intervalle\").", - "use-metadata-dynamic-interval-tooltip": "Si cette option est sélectionnée, le nœud de règle utilisera un intervalle dynamique basé sur le message et les modèles de métadonnées.", + "fetch-timeseries-from-to": "Récupérer les séries temporelles depuis {{startInterval}} {{startIntervalTimeUnit}} jusqu'à {{endInterval}} {{endIntervalTimeUnit}}.", + "fetch-timeseries-from-to-invalid": "Récupération de séries temporelles invalide (\"Début de l'intervalle\" doit être inférieur à \"Fin de l'intervalle\").", + "use-metadata-dynamic-interval-tooltip": "Si sélectionné, le nœud de règle utilisera des intervalles dynamiques de début et de fin basés sur les modèles de message et de métadonnées.", "all-mode-hint": "Si le mode de récupération \"Tout\" est sélectionné, le nœud de règle récupérera la télémétrie de l'intervalle de récupération avec des paramètres de requête configurables.", - "first-mode-hint": "Si le mode de récupération \"Premier\" est sélectionné, le nœud de règle récupérera la télémétrie la plus proche du début de l'intervalle.", - "last-mode-hint": "Si le mode de récupération \"Dernier\" est sélectionné, le nœud de règle récupérera la télémétrie la plus proche de la fin de l'intervalle.", + "first-mode-hint": "Si le mode de récupération \"Premier\" est sélectionné, le nœud de règle récupérera la télémétrie la plus proche du début de l'intervalle de récupération.", + "last-mode-hint": "Si le mode de récupération \"Dernier\" est sélectionné, le nœud de règle récupérera la télémétrie la plus proche de la fin de l'intervalle de récupération.", "ascending": "Croissant", "descending": "Décroissant", "min": "Minimum", @@ -5313,14 +5338,14 @@ "count": "Nombre", "none": "Aucun", "last-level-relation-tooltip": "Recherche des entités liées uniquement au niveau de relation maximum défini si activé.", - "last-level-device-relation-tooltip": "Recherche des périphériques liés uniquement au niveau spécifié si activé.", + "last-level-device-relation-tooltip": "Recherche des appareils liés uniquement au niveau spécifié si activé.", "data-to-fetch": "Données à récupérer", "mapping-of-customers": "Mappage des clients", "map-fields-required": "Tous les champs de mappage sont requis.", "attributes": "Attributs", - "related-device-attributes": "Attributs du périphérique lié", + "related-device-attributes": "Attributs de l’appareil lié", "add-selected-attributes-to": "Ajouter les attributs sélectionnés à", - "device-profiles": "Profils de périphérique", + "device-profiles": "Profils d'appareils", "mapping-of-tenant": "Mappage du locataire", "add-attribute-key": "Ajouter une clé d’attribut", "message-template": "Modèle de message", @@ -5331,20 +5356,20 @@ "keys-mapping": "Mappage des clés", "add-key": "Ajouter une clé", "recipients": "Destinataires", - "message-subject-and-content": "Objet et contenu du message", - "template-rules-hint": "Les champs supportent la templatization avec $[messageKey] ou ${metadataKey}.", - "originator-customer-desc": "Utilise le client de l’origine du message comme nouvelle origine.", - "originator-tenant-desc": "Utilise le locataire actuel comme origine.", - "originator-related-entity-desc": "Utilise une entité liée comme origine, selon le type et la direction de relation.", - "originator-alarm-originator-desc": "Utilise l’origine de l’alarme si le message provient d’une entité d’alarme.", - "originator-entity-by-name-pattern-desc": "Utilise une entité récupérée par type et modèle de nom.", - "email-from-template-hint": "Utilisez $[messageKey] ou ${metadataKey} pour remplir dynamiquement.", - "recipients-block-main-hint": "Liste d’adresses séparées par des virgules. Supporte la templatization.", - "forward-msg-default-rule-chain": "Transférer au rule chain par défaut de l’origine", - "forward-msg-default-rule-chain-tooltip": "Transfère au rule chain par défaut ou configuré si aucun n’est défini dans le profil.", + "message-subject-and-content": "Sujet et contenu du message", + "template-rules-hint": "Les deux champs d'entrée prennent en charge la templatisation. Utilisez $[messageKey] pour extraire la valeur du message et ${metadataKey} pour extraire la valeur des métadonnées du message.", + "originator-customer-desc": "Utiliser le client de l'initiateur du message entrant comme nouveau créateur.", + "originator-tenant-desc": "Utiliser le locataire actuel comme nouveau créateur.", + "originator-related-entity-desc": "Utiliser l'entité liée comme nouveau créateur. Recherche basée sur le type de relation et la direction configurés.", + "originator-alarm-originator-desc": "Utiliser l'initiateur de l'alarme comme nouveau créateur. Seulement si l'initiateur du message entrant est une entité d'alarme.", + "originator-entity-by-name-pattern-desc": "Utiliser l'entité récupérée de la base de données comme nouveau créateur. Recherche basée sur le type d'entité et le modèle de nom spécifié.", + "email-from-template-hint": "Utilisez $[messageKey] pour extraire la valeur du message et ${metadataKey} pour extraire la valeur des métadonnées.", + "recipients-block-main-hint": "Liste d'adresses séparées par des virgules. Tous les champs d'entrée prennent en charge la templatisation. Utilisez $[messageKey] pour extraire la valeur du message et ${metadataKey} pour extraire la valeur des métadonnées.", + "forward-msg-default-rule-chain": "Transférer le message vers la chaîne de règles par défaut de l'initiateur", + "forward-msg-default-rule-chain-tooltip": "Si activé, le message sera transféré à la chaîne de règles par défaut de l'initiateur, ou à la chaîne de règles configurée, si l'initiateur n'a pas de chaîne de règles par défaut définie dans le profil de l'entité.", "exclude-zero-deltas": "Exclure les deltas nuls du message sortant", - "exclude-zero-deltas-hint": "Ajoute la clé {{outputValueKey}} uniquement si sa valeur est différente de zéro.", - "exclude-zero-deltas-time-difference-hint": "Ajoute les clés {{outputValueKey}} et {{periodValueKey}} uniquement si {{outputValueKey}} ≠ 0.", + "exclude-zero-deltas-hint": "Si activé, la clé de sortie \"{{outputValueKey}}\" sera ajoutée au message sortant si sa valeur n'est pas zéro.", + "exclude-zero-deltas-time-difference-hint": "Si activé, les clés de sortie \"{{outputValueKey}}\" et \"{{periodValueKey}}\" seront ajoutées au message sortant uniquement si la valeur de \"{{outputValueKey}}\" n'est pas zéro.", "search-direction-from": "De l’origine vers l’entité cible", "search-direction-to": "De l’entité cible vers l’origine", "del-relation-direction-from": "Depuis l’origine", @@ -5354,21 +5379,21 @@ "function-name": "Nom de la fonction", "function-name-required": "Le nom de la fonction est requis.", "qualifier": "Qualificateur", - "qualifier-hint": "Par défaut, \"$LATEST\" sera utilisé si vide.", + "qualifier-hint": "Si le qualificateur n'est pas spécifié, le qualificateur par défaut \"$LATEST\" sera utilisé.", "aws-credentials": "Identifiants AWS", "connection-timeout": "Délai de connexion", "connection-timeout-required": "Le délai de connexion est requis.", - "connection-timeout-min": "Valeur minimale : 0", - "connection-timeout-hint": "Temps d’attente (en sec) pour établir la connexion. 0 = infini (non recommandé).", - "request-timeout": "Délai de requête", - "request-timeout-required": "Le délai de requête est requis", - "request-timeout-min": "Valeur minimale : 0", - "request-timeout-hint": "Temps d’attente (en sec) pour exécution de la requête. 0 = infini (non recommandé).", + "connection-timeout-min": "Le délai de connexion minimum est de 0.", + "connection-timeout-hint": "Le temps d'attente en secondes lors de l'établissement initial d'une connexion avant l'abandon et le délai d'attente. Une valeur de 0 signifie l'infini et n'est pas recommandée.", + "request-timeout": "Délai d'attente de la demande", + "request-timeout-required": "Le délai d'attente de la demande est requis", + "request-timeout-min": "Le délai d'attente minimum pour la demande est de 0", + "request-timeout-hint": "Le temps d'attente en secondes pour que la demande soit terminée avant l'abandon et le délai d'attente. Une valeur de 0 signifie l'infini et n'est pas recommandée.", "units": "Unités", - "tell-failure-aws-lambda": "Signaler un échec si l’exécution AWS Lambda échoue", - "tell-failure-aws-lambda-hint": "Déclenche un échec du traitement si AWS Lambda lève une exception.", - "basic-mode": "Mode basique", - "advanced-mode": "Mode avancé", + "tell-failure-aws-lambda": "Signaler un échec si l'exécution de la fonction AWS Lambda génère une exception", + "tell-failure-aws-lambda-hint": "Le nœud de règle force l'échec du traitement du message si l'exécution de la fonction AWS Lambda génère une exception.", + "basic-mode": "Basique", + "advanced-mode": "Avancé", "save-time-series": { "processing-settings": "Paramètres de traitement", "processing-settings-hint": "Définissez comment les messages entrants sont traités. Les paramètres de base permettent de sélectionner des stratégies préconfigurées, tandis que les paramètres avancés permettent de choisir des stratégies individuelles pour chaque action.", @@ -5430,34 +5455,35 @@ "after-template-evaluation-hint": "Après évaluation du modèle, la valeur doit être true pour HTML, et false pour Texte brut." }, "ai": { - "ai-model": "Modèle IA", + "ai-model": "Modèle d'IA", "model": "Modèle", - "ai-model-hint": "Sélectionnez le modèle IA préconfiguré pour traiter les requêtes envoyées par ce nœud de règle, ou utilisez \"Créer un nouveau\" pour en configurer un nouveau.", - "prompt-settings": "Paramètres de prompt", - "prompt-settings-hint": "Le prompt système optionnel définit le rôle général et les contraintes de l'IA, tandis que le prompt utilisateur précise la tâche à exécuter. Les deux champs prennent en charge la modélisation par modèle (templatization).", - "system-prompt": "Prompt système", - "system-prompt-max-length": "Le prompt système doit comporter 500 000 caractères ou moins.", - "system-prompt-blank": "Le prompt système ne doit pas être vide.", - "user-prompt": "Prompt utilisateur", - "user-prompt-required": "Le prompt utilisateur est requis.", - "user-prompt-max-length": "Le prompt utilisateur doit comporter 500 000 caractères ou moins.", - "user-prompt-blank": "Le prompt utilisateur ne doit pas être vide.", + "ai-model-hint": "Sélectionnez le modèle d'IA préconfiguré pour traiter les demandes envoyées par ce nœud de règle, ou utilisez \"Créer un nouveau\" pour configurer un nouveau modèle.", + "prompt-settings": "Paramètres de l'invite", + "prompt-settings-hint": "L'invite système facultative définit le rôle général et les contraintes de l'IA, tandis que l'invite utilisateur définit la tâche spécifique à accomplir. Les deux champs prennent également en charge la templatisation.", + "system-prompt": "Invite système", + "system-prompt-max-length": "L'invite système doit comporter 500 000 caractères ou moins.", + "system-prompt-blank": "L'invite système ne doit pas être vide.", + "user-prompt": "Invite utilisateur", + "user-prompt-required": "L'invite utilisateur est requise.", + "user-prompt-max-length": "L'invite utilisateur doit comporter 500 000 caractères ou moins.", + "user-prompt-blank": "L'invite utilisateur ne doit pas être vide.", "response-format": "Format de réponse", "response-text": "Texte", "response-json": "JSON", "response-json-schema": "Schéma JSON", - "response-format-hint-TEXT": "Permet au modèle de générer un texte libre, qui peut ou non être un objet JSON valide. Si la sortie n’est pas un objet JSON valide, elle sera automatiquement encapsulée dans un objet JSON sous la clé \"response\".", - "response-format-hint-JSON": "Le modèle doit générer une réponse sous forme de JSON valide. Si la sortie n’est pas un objet JSON valide, elle sera automatiquement encapsulée dans un objet JSON sous la clé \"response\".", - "response-format-hint-JSON_SCHEMA": "Le modèle doit générer un JSON conforme à la structure et aux types de données définis dans le schéma fourni. Si la sortie n’est pas un objet JSON valide, elle sera automatiquement encapsulée dans un objet JSON sous la clé \"response\".", - "response-json-schema-hint": "Bien que tout schéma JSON valide puisse être saisi, ce nœud de règle ne prend en charge qu’un sous-ensemble limité de ses fonctionnalités. Consultez la documentation du nœud pour plus de détails.", + "response-format-hint-TEXT": "Permet au modèle de générer un texte arbitraire, qui peut ou non être un objet JSON valide. Si la sortie n'est pas un objet JSON valide, elle sera automatiquement enveloppée dans un objet JSON sous la clé \"response\".", + "response-format-hint-JSON": "Le modèle doit générer une réponse qui soit un JSON valide. Si la sortie n'est pas un objet JSON valide, elle sera automatiquement enveloppée dans un objet JSON sous la clé \"response\".", + "response-format-hint-JSON_SCHEMA": "Le modèle doit générer un JSON qui correspond à la structure spécifique et aux types de données définis dans le schéma fourni. Si la sortie n'est pas un objet JSON valide, elle sera automatiquement enveloppée dans un objet JSON sous la clé \"response\".", + "response-json-schema-hint": "Bien que tout schéma JSON valide puisse être saisi, ce nœud de règle ne prend en charge qu'un sous-ensemble limité de ses fonctionnalités. Consultez la documentation du nœud pour plus de détails.", "response-json-schema-required": "Le schéma JSON est requis", "advanced-settings": "Paramètres avancés", "timeout": "Délai d'attente", - "timeout-hint": "Temps maximal d’attente d’une réponse \nde la part du modèle IA avant l’arrêt de la requête.", + "timeout-hint": "Temps maximum à attendre pour une réponse \ndu modèle d'IA avant que la demande ne soit terminée.", "timeout-required": "Le délai d'attente est requis", "timeout-validation": "Doit être compris entre 1 seconde et 10 minutes.", - "force-acknowledgement": "Forcer l’accusé de réception", - "force-acknowledgement-hint": "Si activé, le message entrant est accusé immédiatement. La réponse du modèle est ensuite mise en file d’attente comme un nouveau message distinct." + "force-acknowledgement": "Forcer l'accusé de réception", + "force-acknowledgement-hint": "Si activé, le message entrant est immédiatement reconnu. La réponse du modèle est ensuite mise en file d'attente en tant que message distinct.", + "ai-resources": "Ressources IA" } }, "timezone": { @@ -5757,32 +5783,32 @@ "rule-engine-exceptions-ttl-days": "Durée de vie des exceptions du moteur de règles", "rule-engine-exceptions-ttl-days-required": "La durée est requise", "rule-engine-exceptions-ttl-days-range": "La durée ne peut pas être négative", - "max-rule-node-executions-per-message": "Nombre maximal d'exécutions par message d'un nœud de règle", - "max-rule-node-executions-per-message-required": "Le nombre est requis.", - "max-rule-node-executions-per-message-range": "Le nombre ne peut pas être négatif", - "max-emails": "Nombre maximal d'e-mails envoyés", - "max-emails-required": "Le nombre d'e-mails est requis.", - "max-emails-range": "Le nombre ne peut pas être négatif", + "max-rule-node-executions-per-message": "Nombre maximum d'exécutions de nœud de règle par message", + "max-rule-node-executions-per-message-required": "Le nombre maximum d'exécutions de nœud de règle par message est requis.", + "max-rule-node-executions-per-message-range": "Le nombre maximum d'exécutions de nœud de règle par message ne peut pas être négatif", + "max-emails": "Nombre maximum d'e-mails envoyés", + "max-emails-required": "Le nombre maximum d'e-mails envoyés est requis.", + "max-emails-range": "Le nombre maximum d'e-mails envoyés ne peut pas être négatif", "sms-enabled": "SMS activé", - "max-sms": "Nombre maximal de SMS envoyés", - "max-sms-required": "Le nombre de SMS est requis.", - "max-sms-range": "Le nombre ne peut pas être négatif", - "max-created-alarms": "Nombre maximal d'alarmes créées", - "max-created-alarms-required": "Le nombre est requis.", - "max-created-alarms-range": "Le nombre ne peut pas être négatif", - "no-queue": "Aucune file d’attente configurée", - "add-queue": "Ajouter une file d’attente", - "queues-with-count": "Files d’attente ({{count}})", + "max-sms": "Nombre maximum de SMS envoyés", + "max-sms-required": "Le nombre maximum de SMS envoyés est requis.", + "max-sms-range": "Le nombre maximum de SMS envoyés ne peut pas être négatif", + "max-created-alarms": "Nombre maximum d'alarmes créées", + "max-created-alarms-required": "Le nombre maximum d'alarmes créées est requis.", + "max-created-alarms-range": "Le nombre maximum d'alarmes créées ne peut pas être négatif", + "no-queue": "Aucune file d'attente configurée", + "add-queue": "Ajouter une file d'attente", + "queues-with-count": "Files d'attente ({{count}})", "tenant-rest-limits": "Requêtes REST pour le locataire", "customer-rest-limits": "Requêtes REST pour le client", - "incorrect-pattern-for-rate-limits": "Le format est une liste de paires séparées par des virgules, contenant une capacité et une période (en secondes), séparées par deux-points, par ex. 100:1,2000:60", + "incorrect-pattern-for-rate-limits": "Le format est une liste séparée par des virgules de paires de capacité et de période (en secondes) avec un deux-points entre, par exemple 100:1,2000:60", "too-small-value-zero": "La valeur doit être supérieure à 0", "too-small-value-one": "La valeur doit être supérieure à 1", - "queue-size-is-limited-by-system-configuration": "La taille de la file d’attente est également limitée par la configuration système.", - "cassandra-write-tenant-core-limits-configuration": "Requêtes d’écriture Cassandra via l’API REST", - "cassandra-read-tenant-core-limits-configuration": "Requêtes de lecture Cassandra via l’API REST et WS (télémétrie)", - "cassandra-write-tenant-rule-engine-limits-configuration": "Requêtes d’écriture Cassandra du moteur de règles (télémétrie)", - "cassandra-read-tenant-rule-engine-limits-configuration": "Requêtes de lecture Cassandra du moteur de règles (télémétrie)", + "queue-size-is-limited-by-system-configuration": "La taille de la file d'attente est également limitée par la configuration du système.", + "cassandra-write-tenant-core-limits-configuration": "Requêtes d'écriture Cassandra API REST", + "cassandra-read-tenant-core-limits-configuration": "Requêtes de lecture Cassandra API REST et WS télémétrie", + "cassandra-write-tenant-rule-engine-limits-configuration": "Requêtes d'écriture Cassandra moteur de règles télémétrie", + "cassandra-read-tenant-rule-engine-limits-configuration": "Requêtes de lecture Cassandra moteur de règles télémétrie", "ws-limit-max-sessions-per-tenant": "Nombre maximal de sessions par locataire", "ws-limit-max-sessions-per-customer": "Nombre maximal de sessions par client", "ws-limit-max-sessions-per-regular-user": "Nombre maximal de sessions par utilisateur régulier", @@ -5799,36 +5825,36 @@ "advanced-settings": "Paramètres avancés", "edit-limit": "Modifier la limite", "calculated-field-debug-event-rate-limit": "Événements de débogage des champs calculés", - "edit-calculated-field-debug-event-rate-limit": "Modifier les limites de débit des événements de débogage des champs calculés", - "edit-transport-tenant-msg-title": "Modifier les limites de débit des messages transport du locataire", - "edit-transport-tenant-telemetry-msg-title": "Modifier les limites de débit des messages de télémétrie transport du locataire", - "edit-transport-tenant-telemetry-data-points-title": "Modifier les limites de débit des points de données de télémétrie transport du locataire", - "edit-transport-device-msg-title": "Modifier les limites de débit des messages transport de l'appareil", - "edit-transport-device-telemetry-msg-title": "Modifier les limites de débit des messages de télémétrie transport de l'appareil", - "edit-transport-device-telemetry-data-points-title": "Modifier les limites de débit des points de données de télémétrie transport de l'appareil", - "edit-transport-gateway-msg-title": "Modifier les limites de débit des messages transport de la passerelle", - "edit-transport-gateway-telemetry-msg-title": "Modifier les limites de débit des messages de télémétrie transport de la passerelle", - "edit-transport-gateway-telemetry-data-points-title": "Modifier les limites de débit des points de données de télémétrie transport de la passerelle", - "edit-transport-gateway-device-msg-title": "Modifier les limites de débit des messages transport des appareils de la passerelle", - "edit-transport-gateway-device-telemetry-msg-title": "Modifier les limites de débit des messages de télémétrie transport des appareils de la passerelle", - "edit-transport-gateway-device-telemetry-data-points-title": "Modifier les limites de débit des points de données de télémétrie transport des appareils de la passerelle", - "edit-tenant-rest-limits-title": "Modifier les limites de débit des requêtes REST du locataire", - "edit-customer-rest-limits-title": "Modifier les limites de débit des requêtes REST du client", - "edit-ws-limit-updates-per-session-title": "Modifier les limites de débit des mises à jour WS par session", - "edit-cassandra-write-tenant-core-limits-configuration": "Modifier les requêtes d’écriture Cassandra via l’API REST", - "edit-cassandra-read-tenant-core-limits-configuration": "Modifier les requêtes de lecture Cassandra via l’API REST et WS (télémétrie)", - "edit-cassandra-write-tenant-rule-engine-limits-configuration": "Modifier les requêtes d’écriture Cassandra du moteur de règles (télémétrie)", - "edit-cassandra-read-tenant-rule-engine-limits-configuration": "Modifier les requêtes de lecture Cassandra du moteur de règles (télémétrie)", - "edit-tenant-entity-export-rate-limit-title": "Modifier les limites de création de version d’entité", - "edit-tenant-entity-import-rate-limit-title": "Modifier les limites de chargement de version d’entité", - "edit-tenant-notification-request-rate-limit-title": "Modifier les limites des requêtes de notification", - "edit-tenant-notification-requests-per-rule-rate-limit-title": "Modifier les limites des requêtes de notification par règle", + "edit-calculated-field-debug-event-rate-limit": "Modifier les limites de taux des événements de débogage des champs calculés", + "edit-transport-tenant-msg-title": "Modifier les limites de taux des messages de transport pour le locataire", + "edit-transport-tenant-telemetry-msg-title": "Modifier les limites de taux des messages de télémétrie de transport pour le locataire", + "edit-transport-tenant-telemetry-data-points-title": "Modifier les limites de taux des points de données de télémétrie de transport pour le locataire", + "edit-transport-device-msg-title": "Modifier les limites de taux des messages de transport pour l'appareil", + "edit-transport-device-telemetry-msg-title": "Modifier les limites de taux des messages de télémétrie de transport pour l'appareil", + "edit-transport-device-telemetry-data-points-title": "Modifier les limites de taux des points de données de télémétrie de transport pour l'appareil", + "edit-transport-gateway-msg-title": "Modifier les limites de taux des messages de transport pour la passerelle", + "edit-transport-gateway-telemetry-msg-title": "Modifier les limites de taux des messages de télémétrie de transport pour la passerelle", + "edit-transport-gateway-telemetry-data-points-title": "Modifier les limites de taux des points de données de télémétrie de transport pour la passerelle", + "edit-transport-gateway-device-msg-title": "Modifier les limites de taux des messages de transport pour l'appareil de la passerelle", + "edit-transport-gateway-device-telemetry-msg-title": "Modifier les limites de taux des messages de télémétrie de transport pour l'appareil de la passerelle", + "edit-transport-gateway-device-telemetry-data-points-title": "Modifier les limites de taux des points de données de télémétrie de transport pour l'appareil de la passerelle", + "edit-tenant-rest-limits-title": "Modifier les limites des requêtes REST pour le locataire", + "edit-customer-rest-limits-title": "Modifier les limites des requêtes REST pour le client", + "edit-ws-limit-updates-per-session-title": "Modifier les limites des mises à jour WS par session", + "edit-cassandra-write-tenant-core-limits-configuration": "Modifier les requêtes d'écriture Cassandra de l'API REST", + "edit-cassandra-read-tenant-core-limits-configuration": "Modifier les requêtes de lecture Cassandra de l'API REST et de la télémétrie WS", + "edit-cassandra-write-tenant-rule-engine-limits-configuration": "Modifier les requêtes d'écriture Cassandra de la télémétrie du moteur de règles", + "edit-cassandra-read-tenant-rule-engine-limits-configuration": "Modifier les requêtes de lecture Cassandra de la télémétrie du moteur de règles", + "edit-tenant-entity-export-rate-limit-title": "Modifier les limites de taux de création d'entités", + "edit-tenant-entity-import-rate-limit-title": "Modifier les limites de taux de chargement d'entités", + "edit-tenant-notification-request-rate-limit-title": "Modifier les limites de taux des demandes de notification", + "edit-tenant-notification-requests-per-rule-rate-limit-title": "Modifier les limites de taux des demandes de notification par règle de notification", "edit-edge-events-rate-limit": "Modifier les limites des événements Edge", "edit-edge-events-per-edge-rate-limit": "Modifier les limites des événements Edge par instance", "edge-events-rate-limit": "Événements Edge", "edge-events-per-edge-rate-limit": "Événements Edge par instance", "edit-edge-uplink-messages-rate-limit": "Modifier les limites des messages montants Edge", - "edit-edge-uplink-messages-per-edge-rate-limit": "Modifier les limites des messages montants Edge par instance", + "edit-edge-uplink-messages-per-edge-rate-limit": "Modifier les messages montants Edge conformément aux limites de débit Edge", "edge-uplink-messages-rate-limit": "Messages montants Edge", "edge-uplink-messages-per-edge-rate-limit": "Messages montants Edge par instance", "messages-per": "messages par", @@ -5838,23 +5864,23 @@ "number-of-messages-min": "La valeur minimale est 1.", "preview": "Aperçu", "per-seconds": "Par secondes", - "per-seconds-required": "La durée est requise.", + "per-seconds-required": "Le taux de temps est requis.", "per-seconds-min": "La valeur minimale est 1.", - "per-seconds-duplicate": "Taux de temps en double. Chaque intervalle de temps doit être unique.", - "rate-limits": "Limites de débit", + "per-seconds-duplicate": "Taux de temps dupliqué. Chaque intervalle de temps doit être unique.", + "rate-limits": "Limites de taux", "remove-limit": "Supprimer la limite", - "transport-tenant-msg": "Messages de transport du locataire", - "transport-tenant-telemetry-msg": "Messages de télémétrie du locataire", - "transport-tenant-telemetry-data-points": "Points de données de télémétrie du locataire", - "transport-device-msg": "Messages de l’appareil", - "transport-device-telemetry-msg": "Messages de télémétrie de l’appareil", - "transport-device-telemetry-data-points": "Points de données de télémétrie de l’appareil", - "transport-gateway-msg": "Messages de la passerelle", - "transport-gateway-telemetry-msg": "Messages de télémétrie de la passerelle", - "transport-gateway-telemetry-data-points": "Points de données de télémétrie de la passerelle", - "transport-gateway-device-msg": "Messages des appareils de la passerelle", - "transport-gateway-device-telemetry-msg": "Messages de télémétrie des appareils de la passerelle", - "transport-gateway-device-telemetry-data-points": "Points de données de télémétrie des appareils de la passerelle", + "transport-tenant-msg": "Messages de transport pour le locataire", + "transport-tenant-telemetry-msg": "Messages de télémétrie de transport pour le locataire", + "transport-tenant-telemetry-data-points": "Points de données de télémétrie de transport pour le locataire", + "transport-device-msg": "Messages de transport pour l'appareil", + "transport-device-telemetry-msg": "Messages de télémétrie de transport pour l'appareil", + "transport-device-telemetry-data-points": "Points de données de télémétrie de transport pour l'appareil", + "transport-gateway-msg": "Messages de transport pour la passerelle", + "transport-gateway-telemetry-msg": "Messages de télémétrie de transport pour la passerelle", + "transport-gateway-telemetry-data-points": "Points de données de télémétrie de transport pour la passerelle", + "transport-gateway-device-msg": "Messages de transport pour l'appareil de la passerelle", + "transport-gateway-device-telemetry-msg": "Messages de télémétrie de transport pour l'appareil de la passerelle", + "transport-gateway-device-telemetry-data-points": "Points de données de télémétrie de transport pour l'appareil de la passerelle", "sec": "sec" } }, @@ -5987,83 +6013,84 @@ "label": "Étiquette", "value": "Valeur", "date": "Date", - "show-date-time-interval": "Afficher l’intervalle date/heure", - "show-date-time-interval-hint": "Afficher l’intervalle date/heure en fonction de l’agrégation des données.", + "show-date-time-interval": "Afficher l'intervalle de date et d'heure", + "show-date-time-interval-hint": "Afficher l'intervalle de date et d'heure selon l'agrégation des données.", "hide-zero-tooltip-values": "Masquer les valeurs nulles", - "background-color": "Couleur d’arrière-plan", - "background-blur": "Flou d’arrière-plan" + "show-stack-total": "Afficher la valeur totale en mode empilé", + "background-color": "Couleur de fond", + "background-blur": "Flou de fond" }, "unit": { - "set-unit-conversion": "Définir la conversion d’unités", + "set-unit-conversion": "Définir la conversion d'unités", "unit-settings": { - "unit-settings": "Paramètres d’unité", + "unit-settings": "Paramètres des unités", "source-unit": "Unité source", - "source-unit-hint": "Il s’agit de l’unité de la valeur stockée. L’unité à partir de laquelle vous effectuez la conversion. Entrez le symbole utilisé par vos données sources (ex. : m, km, ft, in).", + "source-unit-hint": "Il s'agit de l'unité de la valeur stockée. L'unité dont vous effectuez la conversion. Entrez le symbole utilisé par vos données sources (par exemple, m, km, ft, in).", "target-metric-unit": "Unité métrique cible", - "target-metric-unit-hint": "Choisissez l’unité métrique (SI) vers laquelle vous souhaitez convertir votre valeur source (ex. : cm, mm, km).", + "target-metric-unit-hint": "Choisissez l'unité métrique (SI) dans laquelle vous souhaitez convertir votre valeur source (par exemple, cm, mm, km).", "target-imperial-unit": "Unité impériale cible", - "target-imperial-unit-hint": "Choisissez l’unité impériale vers laquelle vous souhaitez convertir votre valeur source (ex. : in, ft, yd).", + "target-imperial-unit-hint": "Choisissez l'unité impériale dans laquelle vous souhaitez convertir votre valeur source (par exemple, in, ft, yd).", "target-hybrid-unit": "Unité hybride cible", - "target-hybrid-unit-hint": "Choisissez l’unité hybride vers laquelle vous souhaitez convertir votre valeur source (ex. : cm, in, km). Les unités hybrides combinent des unités métriques ou impériales.", - "enable-unit-conversion": "Activer la conversion d’unités", - "enable-unit-conversion-hint": "Activez cette option pour appliquer la conversion. Si désactivée, votre valeur source sera transmise sans modification. Désactivée s’il n’existe qu’une seule unité dans le groupe de mesure correspondant (ex. : flux lumineux, AQI)." + "target-hybrid-unit-hint": "Choisissez l'unité hybride dans laquelle vous souhaitez convertir votre valeur source (par exemple, cm, in, km). Les unités hybrides combinent les unités métriques ou impériales.", + "enable-unit-conversion": "Activer la conversion d'unités", + "enable-unit-conversion-hint": "Activez cette option pour activer la conversion. Si désactivé, votre valeur source passera inchangée. Désactivé s'il n'y a qu'une seule unité dans le groupe de mesures correspondant (par exemple, flux lumineux, AQI)." }, - "unit-system": "Système d’unités", + "unit-system": "Système d'unités", "unit-system-type": { - "AUTO": "Auto", + "AUTO": "Automatique", "METRIC": "Métrique", "IMPERIAL": "Impérial", "HYBRID": "Hybride" }, "measures": { - "absorbed-dose-rate": "Débit de dose absorbée", + "absorbed-dose-rate": "Taux de dose absorbée", "acceleration": "Accélération", "acidity": "Acidité", - "air-quality-index": "Indice de qualité de l’air", - "amount-of-substance": "Quantité de matière", + "air-quality-index": "Indice de qualité de l'air", + "amount-of-substance": "Quantité de substance", "angle": "Angle", "angular-acceleration": "Accélération angulaire", "area": "Surface", - "area-density": "Densité surfacique", - "capacitance": "Capacité électrique", + "area-density": "Densité de surface", + "capacitance": "Capacité", "catalytic-activity": "Activité catalytique", "catalytic-concentration": "Concentration catalytique", "charge": "Charge", "current-density": "Densité de courant", - "data-transfer-rate": "Débit de transfert de données", + "data-transfer-rate": "Taux de transfert de données", "density": "Densité", "digital": "Numérique", - "dimension-ratio": "Rapport de dimensions", + "dimension-ratio": "Rapport dimensionnel", "dynamic-viscosity": "Viscosité dynamique", - "earthquake-magnitude": "Magnitude sismique", + "earthquake-magnitude": "Magnitude du séisme", "electric-charge-density": "Densité de charge électrique", "electric-current": "Courant électrique", "electric-dipole-moment": "Moment dipolaire électrique", "electric-field-strength": "Intensité du champ électrique", "electric-flux": "Flux électrique", "electric-permittivity": "Permittivité électrique", - "electric-polarizability": "Polarisabilité électrique", + "electric-polarizability": "Polarizabilité électrique", "electrical-conductance": "Conductance électrique", "electrical-conductivity": "Conductivité électrique", "energy": "Énergie", - "energy-density": "Densité d’énergie", + "energy-density": "Densité d'énergie", "force": "Force", "frequency": "Fréquence", - "fuel-efficiency": "Rendement énergétique", + "fuel-efficiency": "Efficacité énergétique", "heat-capacity": "Capacité thermique", - "illuminance": "Éclairement lumineux", + "illuminance": "Éclairement", "inductance": "Inductance", "kinematic-viscosity": "Viscosité cinématique", "length": "Longueur", - "light-exposure": "Exposition lumineuse", - "linear-charge-density": "Densité linéique de charge", + "light-exposure": "Exposition à la lumière", + "linear-charge-density": "Densité de charge linéaire", "logarithmic-ratio": "Rapport logarithmique", "luminous-efficacy": "Efficacité lumineuse", "luminous-flux": "Flux lumineux", "luminous-intensity": "Intensité lumineuse", - "magnetic-field-gradient": "Gradient de champ magnétique", + "magnetic-field-gradient": "Gradient du champ magnétique", "magnetic-flux": "Flux magnétique", - "magnetic-flux-density": "Induction magnétique", + "magnetic-flux-density": "Densité de flux magnétique", "magnetic-moment": "Moment magnétique", "magnetic-permeability": "Perméabilité magnétique", "mass": "Masse", @@ -6078,23 +6105,23 @@ "power-density": "Densité de puissance", "pressure": "Pression", "radiance": "Radiance", - "radiant-intensity": "Intensité de rayonnement", - "radiation-dose": "Dose de rayonnement", + "radiant-intensity": "Intensité radiant", + "radiation-dose": "Dose de radiation", "radioactive-decay": "Désintégration radioactive", "radioactivity": "Radioactivité", - "radioactivity-concentration": "Concentration radioactive", + "radioactivity-concentration": "Concentration en radioactivité", "reciprocal-length": "Longueur réciproque", "resistance": "Résistance", "reynolds-number": "Nombre de Reynolds", - "signal-level": "Niveau du signal", + "signal-level": "Niveau de signal", "solid-angle": "Angle solide", "specific-energy": "Énergie spécifique", "specific-heat-capacity": "Capacité thermique spécifique", "specific-humidity": "Humidité spécifique", "specific-volume": "Volume spécifique", "speed": "Vitesse", - "surface-charge-density": "Densité de charge surfacique", - "surface-tension": "Tension superficielle", + "surface-charge-density": "Densité de charge de surface", + "surface-tension": "Tension de surface", "temperature": "Température", "thermal-conductivity": "Conductivité thermique", "time": "Temps", @@ -6102,7 +6129,7 @@ "turbidity": "Turbidité", "voltage": "Tension", "volume": "Volume", - "volume-flow": "Débit volumique" + "volume-flow": "Débit volumétrique" }, "millimeter": "Millimètre", "centimeter": "Centimètre", @@ -6114,8 +6141,8 @@ "kilometer": "Kilomètre", "inch": "Pouce", "foot": "Pied", - "foot-us": "Pied (US survey)", - "yard": "Yard", + "foot-us": "Pied (enquête US)", + "yard": "Jarde", "mile": "Mille", "nautical-mile": "Mille nautique", "astronomical-unit": "Unité astronomique", @@ -6160,8 +6187,8 @@ "cubic-inch": "Pouce cube", "cubic-foot": "Pied cube", "cubic-yard": "Yard cube", - "fluid-ounce": "Once liquide", - "fluid-ounce-per-second": "Once liquide par seconde", + "fluid-ounce": "Once fluide", + "fluid-ounce-per-second": "Once fluide par seconde", "pint": "Pinte", "quart": "Quart", "gallon": "Gallon", @@ -6176,7 +6203,7 @@ "kelvin": "Kelvin", "rankine": "Rankine", "fahrenheit": "Fahrenheit", - "percent": "Pourcentage", + "percent": "Pourcent", "meter-per-second": "Mètre par seconde", "kilometer-per-hour": "Kilomètre par heure", "foot-per-second": "Pied par seconde", @@ -6209,9 +6236,9 @@ "pascal-per-square-meter": "Pascal par mètre carré", "pound-per-square-inch": "Livre par pouce carré", "newton-per-square-meter": "Newton par mètre carré", - "kilogram-force-per-square-meter": "Kilogramme-force par mètre carré", + "kilogram-force-per-square-meter": "Force de kilogramme par mètre carré", "pascal-per-square-centimeter": "Pascal par centimètre carré", - "ton-force-per-square-inch": "Tonne-force par pouce carré", + "ton-force-per-square-inch": "Force en tonne par pouce carré", "kilonewton-per-square-meter": "Kilonewton par mètre carré", "newton-per-square-millimeter": "Newton par millimètre carré", "microjoule": "Microjoule", @@ -6226,11 +6253,11 @@ "milliwatt-hour": "Milliwatt-heure", "megawatt-hour": "Mégawatt-heure", "gigawatt-hour": "Gigawatt-heure", - "electron-volts": "Électron-volt", + "electron-volts": "Volts électroniques", "joules-per-coulomb": "Joules par coulomb", "british-thermal-unit": "Unité thermique britannique", "thousand-british-thermal-unit": "Mille unités thermiques britanniques", - "million-british-thermal-unit": "Million d’unités thermiques britanniques", + "million-british-thermal-unit": "Million d'unités thermiques britanniques", "foot-pound": "Pied-livre", "calorie": "Calorie", "small-calorie": "Petite calorie", @@ -6260,16 +6287,16 @@ "kilowatt-per-square-meter": "Kilowatt par mètre carré", "watt-per-square-inch": "Watt par pouce carré", "kilowatt-per-square-inch": "Kilowatt par pouce carré", - "horsepower": "Cheval-vapeur", + "horsepower": "Chevaux-vapeur", "btu-per-hour": "Unités thermiques britanniques par heure", "btu-per-second": "Unités thermiques britanniques par seconde", "btu-per-day": "Unités thermiques britanniques par jour", "mbtu-per-hour": "Mille unités thermiques britanniques par heure", "mbtu-per-second": "Mille unités thermiques britanniques par seconde", "mbtu-per-day": "Mille unités thermiques britanniques par jour", - "mmbtu-per-hour": "Million d’unités thermiques britanniques par heure", - "mmbtu-per-second": "Million d’unités thermiques britanniques par seconde", - "mmbtu-per-day": "Million d’unités thermiques britanniques par jour", + "mmbtu-per-hour": "Million d'unités thermiques britanniques par heure", + "mmbtu-per-second": "Million d'unités thermiques britanniques par seconde", + "mmbtu-per-day": "Million d'unités thermiques britanniques par jour", "foot-pound-per-second": "Pied-livre par seconde", "coulomb": "Coulomb", "millicoulomb": "Millicoulomb", @@ -6293,8 +6320,8 @@ "barn": "Barn", "circular-inch": "Pouce circulaire", "milliampere-hour": "Milliampère-heure", - "ampere-hours": "Ampère-heure", - "kiloampere-hours": "Kiloampère-heure", + "ampere-hours": "Ampère-heures", + "kiloampere-hours": "Kiloampère-heures", "nanoampere": "Nanoampère", "picoampere": "Picoampère", "microampere": "Microampère", @@ -6307,7 +6334,7 @@ "ampere-per-square-meter": "Ampère par mètre carré", "ampere-per-meter": "Ampère par mètre", "oersted": "Oersted", - "bohr-magneton": "Magneton de Bohr", + "bohr-magneton": "Magnéton de Bohr", "ampere-meter-squared": "Ampère-mètre carré", "nanovolt": "Nanovolt", "picovolt": "Picovolt", @@ -6316,8 +6343,8 @@ "volt": "Volt", "kilovolt": "Kilovolt", "megavolt": "Mégavolt", - "dbmV": "Décibel-volt", - "dbm": "Décibel-milliwatt", + "dbmV": "Décibel volt", + "dbm": "Décibel-milliwatts", "volt-meter": "Volt-mètre", "kilovolt-meter": "Kilovolt-mètre", "megavolt-meter": "Mégavolt-mètre", @@ -6328,20 +6355,20 @@ "microohm": "Microohm", "milliohm": "Milliohm", "kilohm": "Kilohm", - "megohm": "Mégaohm", - "gigohm": "Gigaohm", + "megohm": "Mégohm", + "gigohm": "Gigoohm", "millihertz": "Millihertz", "hertz": "Hertz", "kilohertz": "Kilohertz", "megahertz": "Mégahertz", "gigahertz": "Gigahertz", - "terahertz": "Térrahertz", - "rpm": "Tours par minute", + "terahertz": "Terahertz", + "rpm": "Révolutions par minute", "candela-per-square-meter": "Candela par mètre carré", "candela": "Candela", "lumen": "Lumen", "lux": "Lux", - "foot-candle": "Pied-bougie", + "foot-candle": "Bougie-pied", "lumen-per-square-meter": "Lumen par mètre carré", "lux-second": "Lux-seconde", "lumen-second": "Lumen-seconde", @@ -6352,18 +6379,18 @@ "millimole": "Millimole", "kilomole": "Kilomole", "mole-per-cubic-meter": "Mole par mètre cube", - "rssi": "Indicateur de puissance du signal reçu (RSSI)", + "rssi": "Indicateur de la puissance du signal reçu", "ppm": "Parties par million", "ppb": "Parties par milliard", "micrograms-per-cubic-meter": "Microgrammes par mètre cube", - "aqi": "Indice de qualité de l'air (AQI)", + "aqi": "AQI", "gram-per-cubic-meter": "Gramme par mètre cube", - "gram-per-kilogram": "Humidité spécifique", + "gram-per-kilogram": "Grammes par kilogramme", "millimeters-per-second": "Millimètres par seconde", - "neper": "Néper", + "neper": "Neper", "bel": "Bel", "decibel": "Décibel", - "meters-per-second-squared": "Mètres par seconde carrée", + "meters-per-second-squared": "Mètres par seconde au carré", "becquerel": "Becquerel", "curie": "Curie", "gray": "Gray", @@ -6395,22 +6422,22 @@ "milligram-per-cubic-meter": "Milligramme par mètre cube", "pound-per-cubic-foot": "Livre par pied cube", "ounces-per-cubic-inch": "Onces par pouce cube", - "tons-per-cubic-yard": "Tonnes par yard cube", - "particle-density": "Densité de particules", + "tons-per-cubic-yard": "Tonnes par mètre cube", + "particle-density": "Densité des particules", "kilometers-per-liter": "Kilomètres par litre", "miles-per-gallon": "Miles par gallon", "liters-per-100-km": "Litres par 100 km", - "gallons-per-mile": "Gallons par mille", + "gallons-per-mile": "Gallons par mile", "liters-per-hour": "Litres par heure", "gallons-per-hour": "Gallons par heure", "beats-per-minute": "Battements par minute", "millimeters-of-mercury": "Millimètres de mercure", "milligrams-per-deciliter": "Milligrammes par décilitre", - "g-force": "Force g", + "g-force": "Force G", "kilonewton": "Kilonewton", - "kilogram-force": "Kilogramme-force", - "pound-force": "Livre-force", - "kilopound-force": "Kilolivre-force", + "kilogram-force": "Force kilogramme", + "pound-force": "Force livre", + "kilopound-force": "Force kilolivre", "dyne": "Dyne", "poundal": "Poundal", "kip": "Kip", @@ -6430,7 +6457,7 @@ "day": "Jour", "week": "Semaine", "month": "Mois", - "year": "Année", + "year": "An", "cubic-foot-per-minute": "Pied cube par minute", "cubic-meters-per-hour": "Mètres cubes par heure", "cubic-meters-per-second": "Mètres cubes par seconde", @@ -6461,9 +6488,9 @@ "gigabyte-per-second": "Gigaoctet par seconde", "degree": "Degré", "radian": "Radian", - "gradian": "Grade", - "arcminute": "Minute d’arc", - "arcsecond": "Seconde d’arc", + "gradian": "Gradian", + "arcminute": "Arcminute", + "arcsecond": "Arcseconde", "milliradian": "Milliradian", "revolution": "Révolution", "siemens": "Siemens", @@ -6480,7 +6507,7 @@ "kilofarad": "Kilofarad", "megafarad": "Mégafarad", "gigafarad": "Gigafarad", - "terfarad": "Térafarad", + "terfarad": "Terafarad", "farad-per-meter": "Farad par mètre", "tesla": "Tesla", "gauss": "Gauss", @@ -6490,7 +6517,7 @@ "nanotesla": "Nanotesla", "kilotesla": "Kilotesla", "megatesla": "Mégatesla", - "millitesla-square-meters": "Millitesla mètre carré", + "millitesla-square-meters": "Millitesla mètres carrés", "gamma": "Gamma", "lambda": "Lambda", "square-meter-per-second": "Mètre carré par seconde", @@ -6507,15 +6534,15 @@ "newton-second-per-square-meter": "Newton-seconde par mètre carré", "dyne-second-per-square-centimeter": "Dyne-seconde par centimètre carré", "kilogram-per-meter-second": "Kilogramme par mètre-seconde", - "tesla-square-meters": "Tesla mètre carré", + "tesla-square-meters": "Tesla mètres carrés", "maxwell": "Maxwell", "tesla-per-meter": "Tesla par mètre", "gauss-per-centimeter": "Gauss par centimètre", "weber": "Weber", "microweber": "Microweber", "milliweber": "Milliweber", - "gauss-square-centimeter": "Gauss centimètre carré", - "kilogauss-square-centimeter": "Kilogauss centimètre carré", + "gauss-square-centimeter": "Gauss-centimètre carré", + "kilogauss-square-centimeter": "Kilogauss-centimètre carré", "henry": "Henry", "millihenry": "Millihenry", "microhenry": "Microhenry", @@ -6532,14 +6559,14 @@ "volts-per-meter": "Volts par mètre", "kilovolts-per-meter": "Kilovolts par mètre", "radian-per-second": "Radian par seconde", - "radian-per-second-squared": "Radian par seconde carrée", + "radian-per-second-squared": "Radian par seconde au carré", "revolutions-per-minute-per-second": "Accélération angulaire", "deg-per-second": "Degrés par seconde", "rotation-per-minute": "Rotation par minute", "degrees-brix": "Degrés Brix", "katal": "Katal", "katal-per-cubic-metre": "Katal par mètre cube", - "paris-inch": "Pouce de Paris" + "paris-inch": "Pouce Paris" }, "user": { "user": "Utilisateur", @@ -6690,26 +6717,26 @@ }, "widget": { "widget-library": "Bibliothèque de widgets", - "widget-bundle": "Pack de widgets", - "all-bundles": "Tous les packs", - "select-widgets-bundle": "Sélectionner un pack de widgets", + "widget-bundle": "Bundle de widgets", + "all-bundles": "Tous les bundles", + "select-widgets-bundle": "Sélectionner un bundle de widgets", "widgets": "Widgets", "all-widgets": "Tous les widgets", "widget": "Widget", "select-widget": "Sélectionner un widget", "no-widgets-matching": "Aucun widget correspondant à '{{entity}}' trouvé.", - "no-widgets": "Aucun widget pour l’instant", + "no-widgets": "Aucun widget pour l'instant", "no-widgets-text": "Aucun widget trouvé", "management": "Gestion des widgets", - "editor": "Éditeur de widgets", - "confirm-to-exit-editor-html": "Vous avez des paramètres de widget non enregistrés.
Êtes-vous sûr de vouloir quitter cette page ?", - "widget-type-not-found": "Problème lors du chargement de la configuration du widget.
Le type de widget associé a probablement été supprimé.", - "widget-type-load-error": "Le widget n’a pas pu être chargé en raison des erreurs suivantes :", + "editor": "Éditeur de widget", + "confirm-to-exit-editor-html": "Vous avez des paramètres de widget non enregistrés.
Êtes-vous sûr de vouloir quitter cette page ?", + "widget-type-not-found": "Problème de chargement de la configuration du widget.
Probablement que le type de widget associé\n a été supprimé.", + "widget-type-load-error": "Le widget n'a pas été chargé en raison des erreurs suivantes :", "remove": "Supprimer le widget", "delete": "Supprimer le widget", "edit": "Éditer le widget", - "remove-widget-title": "Êtes-vous sûr de vouloir supprimer le widget '{{widgetTitle}}' ?", - "remove-widget-text": "Après confirmation, le widget et toutes les données associées seront définitivement perdus.", + "remove-widget-title": "Êtes-vous sûr de vouloir supprimer le widget '{{widgetTitle}}' ?", + "remove-widget-text": "Après confirmation, le widget et toutes les données associées deviendront irrécupérables.", "replace-reference-with-widget-copy": "Remplacer la référence par une copie du widget", "timeseries": "Séries temporelles", "search-data": "Rechercher des données", @@ -6819,30 +6846,30 @@ "open-normal": "Normal", "open-in-separate-dialog": "Ouvrir dans une boîte de dialogue séparée", "open-in-popover": "Ouvrir dans une infobulle", - "dialog-title": "Titre de la boîte de dialogue", - "dialog-hide-dashboard-toolbar": "Masquer la barre d'outils du tableau de bord dans la boîte de dialogue", - "dialog-width": "Largeur de la boîte de dialogue en pourcentage de la largeur de l'écran", - "dialog-height": "Hauteur de la boîte de dialogue en pourcentage de la hauteur de l'écran", - "dialog-size-range-error": "La taille de la boîte de dialogue doit être comprise entre 1 et 100.", - "popover-preferred-placement": "Placement préféré de l'infobulle", + "dialog-title": "Titre du dialogue", + "dialog-hide-dashboard-toolbar": "Masquer la barre d'outils du tableau de bord dans le dialogue", + "dialog-width": "Largeur du dialogue en pourcentage par rapport à la largeur de la fenêtre", + "dialog-height": "Hauteur du dialogue en pourcentage par rapport à la hauteur de la fenêtre", + "dialog-size-range-error": "La valeur en pourcentage de la taille du dialogue doit être comprise entre 1 et 100.", + "popover-preferred-placement": "Placement préféré du popover", "popover-placement-top": "Haut", "popover-placement-topLeft": "Haut gauche", - "popover-placement-topRight": "Haut droit", + "popover-placement-topRight": "Haut droite", "popover-placement-right": "Droite", - "popover-placement-rightTop": "Haut droite", - "popover-placement-rightBottom": "Bas droite", + "popover-placement-rightTop": "Droite haut", + "popover-placement-rightBottom": "Droite bas", "popover-placement-bottom": "Bas", "popover-placement-bottomLeft": "Bas gauche", "popover-placement-bottomRight": "Bas droite", "popover-placement-left": "Gauche", - "popover-placement-leftTop": "Haut gauche", - "popover-placement-leftBottom": "Bas gauche", - "popover-hide-on-click-outside": "Masquer l'infobulle en cliquant à l'extérieur", - "popover-hide-dashboard-toolbar": "Masquer la barre d'outils du tableau de bord dans l'infobulle", - "popover-width": "Largeur de l'infobulle", - "popover-height": "Hauteur de l'infobulle", - "popover-style": "Style de l'infobulle", - "open-new-browser-tab": "Ouvrir dans un nouvel onglet", + "popover-placement-leftTop": "Gauche haut", + "popover-placement-leftBottom": "Gauche bas", + "popover-hide-on-click-outside": "Masquer le popover lors d'un clic en dehors", + "popover-hide-dashboard-toolbar": "Masquer la barre d'outils du tableau de bord dans le popover", + "popover-width": "Largeur du popover", + "popover-height": "Hauteur du popover", + "popover-style": "Style du popover", + "open-new-browser-tab": "Ouvrir dans un nouvel onglet du navigateur", "open-URL": "Ouvrir une URL", "URL": "URL", "url-required": "L'URL est requise.", @@ -6986,15 +7013,15 @@ "column-index-required": "L’index de colonne est requis.", "not-set": "Non défini", "action-name": "Nom", - "action-name-required": "Le nom de l’action est requis.", - "action-name-not-unique": "Une autre action avec le même nom existe déjà.\nLe nom de l’action doit être unique pour une même source.", + "action-name-required": "Le nom de l'action est requis.", + "action-name-not-unique": "Une autre action avec le même nom existe déjà.\nLe nom de l'action doit être unique dans la même source d'action.", "action-icon": "Icône", "header-button": { "button-settings": "Paramètres du bouton", "button-type": "Type de bouton", - "button-type-basic": "Basique", - "button-type-raised": "Surélevé", - "button-type-stroked": "Avec contour", + "button-type-basic": "De base", + "button-type-raised": "Élevé", + "button-type-stroked": "Contourné", "button-type-flat": "Plat", "button-type-icon": "Icône", "button-type-mini-fab": "FAB", @@ -7022,9 +7049,9 @@ "advanced-settings": "Paramètres avancés", "data-settings": "Paramètres de données", "limits": "Limites", - "no-data-display-message": "Message alternatif pour « Aucune donnée à afficher »", - "data-page-size": "Nombre maximal d'entités par source de données", - "settings-component-not-found": "Composant du formulaire de paramètres introuvable pour le sélecteur '{{selector}}'", + "no-data-display-message": "\"Aucune donnée à afficher\" message alternatif", + "data-page-size": "Nombre maximum d'entités par source de données", + "settings-component-not-found": "Composant de formulaire de paramètres non trouvé pour le sélecteur '{{selector}}'", "preview": "Aperçu", "set": "Définir", "set-message": "Définir le message", @@ -8092,7 +8119,7 @@ "knob": { "behavior": "Comportement", "initial-value": "Valeur initiale", - "initial-value-hint": "Action permettant d’obtenir la valeur initiale du bouton rotatif.", + "initial-value-hint": "Action permettant d'obtenir la valeur initiale du bouton rotatif.", "on-value-change": "Lors du changement de valeur", "on-value-change-hint": "Action déclenchée lorsque la valeur du bouton rotatif est modifiée.", "range": "Plage", @@ -9001,7 +9028,7 @@ "pie-chart-card-style": "Style de la carte graphique en secteurs" }, "radar-chart": { - "radar-appearance": "Apparence du radar", + "radar-appearance": "Apparence radar", "shape": "Forme", "shape-polygon": "Polygone", "shape-circle": "Cercle", @@ -9010,13 +9037,13 @@ "points": "Points", "points-label": "Étiquette des points", "radar-axis": "Axe radar", - "axis-label": "Étiquette des axes", + "axis-label": "Étiquette de l'axe", "ticks-label": "Étiquette des graduations", "radar-chart-style": "Style du graphique radar", "max-axes-scaling": "Échelle maximale des axes", - "max-axes-scaling-hint": "Choisissez si chaque axe radar a sa propre valeur maximale (Séparée) ou partage la valeur maximale parmi toutes les axes en fonction des données du widget (Commune).", - "separate": "Séparée", - "common": "Commune" + "max-axes-scaling-hint": "Choisissez si chaque axe radar a sa propre valeur maximale (Séparé) ou partage la valeur la plus élevée de l'ensemble des axes selon les données du widget (Commun).", + "separate": "Séparé", + "common": "Commun" }, "time-series-chart": { "chart": "Graphique", @@ -9222,16 +9249,16 @@ "add-time-series": "Ajouter une série temporelle", "execute-rpc-text": "Exécuter la méthode RPC '{{methodName}}'", "get-time-series-text": "Utiliser la série temporelle '{{key}}'", - "get-attribute-text": "Utiliser l'attribut '{{key}}'", - "get-alarm-status-text": "Utiliser le statut de l'alarme", - "get-dashboard-state-text": "Utiliser l'état du tableau de bord", - "get-dashboard-state-object-text": "Utiliser l'objet d'état du tableau de bord", - "when-dashboard-state-is-text": "Lorsque l'identifiant d'état du tableau de bord est '{{state}}'", - "when-dashboard-state-function-is-text": "Lorsque f(identifiant d'état du tableau de bord) est '{{state}}'", - "when-dashboard-state-object-function-is-text": "Lorsque f(objet d'état du tableau de bord) est '{{state}}'", - "set-attribute-to-value-text": "Définir l'attribut '{{key}}' sur : {{value}}", - "add-time-series-value-text": "Ajouter la valeur {{value}} à la série temporelle '{{key}}'", - "set-attribute-text": "Définir l'attribut '{{key}}'", + "get-attribute-text": "Utiliser l’attribut '{{key}}'", + "get-alarm-status-text": "Utiliser l’état de l’alarme", + "get-dashboard-state-text": "Utiliser l’état du tableau de bord", + "get-dashboard-state-object-text": "Utiliser l’objet d’état du tableau de bord", + "when-dashboard-state-is-text": "Lorsque l’identifiant d’état du tableau de bord est '{{state}}'", + "when-dashboard-state-function-is-text": "Lorsque f(identifiant d’état du tableau de bord) est '{{state}}'", + "when-dashboard-state-object-function-is-text": "Lorsque f(objet d’état du tableau de bord) est '{{state}}'", + "set-attribute-to-value-text": "Définir l’attribut '{{key}}' sur : {{value}}", + "add-time-series-value-text": "Ajouter la valeur de série temporelle '{{key}}' : {{value}}", + "set-attribute-text": "Définir l’attribut '{{key}}'", "add-time-series-text": "Ajouter la série temporelle '{{key}}'", "action": "Action", "value": "Valeur", @@ -9404,7 +9431,7 @@ "sys-admin": { "step1": { "title": "Créer un Locataire et un Administrateur de Locataire", - "content": "

Un locataire est une personne ou une organisation qui possède ou produit des dispositifs et des actifs. Le locataire peut avoir plusieurs administrateurs, clients, dispositifs et actifs.

L'administrateur de locataire peut créer et gérer des dispositifs, actifs, clients et tableaux de bord dans le compte du locataire.

Suivez la documentation pour savoir comment procéder :

", + "content": "

Un locataire est une personne ou une organisation qui possède ou produit des appareils et des actifs. Le locataire peut avoir plusieurs administrateurs, clients, appareils et actifs.

L'administrateur de locataire peut créer et gérer des appareils, actifs, clients et tableaux de bord dans le compte du locataire.

Suivez la documentation pour savoir comment procéder :

", "how-to-create-tenant": "Comment créer un Locataire et un Administrateur de Locataire" }, "step2": { @@ -9432,13 +9459,13 @@ }, "tenant-admin": { "step1": { - "title": "Créer un dispositif", - "content": "

Approvisionnons votre premier dispositif sur la plateforme via l'interface utilisateur. Suivez la documentation pour savoir comment procéder :

", - "how-to-create-device": "Comment créer un dispositif" + "title": "Créer un appareil", + "content": "

Approvisionnons votre premier appareil sur la plateforme via l'interface utilisateur. Suivez la documentation pour savoir comment procéder :

", + "how-to-create-device": "Comment créer un appareil" }, "step2": { - "title": "Connecter le dispositif", - "content-before": "

Pour connecter le dispositif, vous devez obtenir ses identifiants. Nous recommandons d'utiliser les identifiants auto-générés par défaut, à savoir le jeton d'accès pour ce guide.

  • Allez dans le tableau des dispositifs
  • Cliquez sur la ligne du dispositif pour ouvrir les détails
  • Appuyez sur le bouton \"Copier le jeton d'accès\"

Utilisez les commandes simples suivantes pour publier des données via HTTP. N'oubliez pas de remplacer $ACCESS_TOKEN par le jeton d'accès de votre dispositif :

", + "title": "Connecter l’appareil", + "content-before": "

Pour connecter l’appareil, vous devez obtenir ses identifiants. Nous recommandons d'utiliser les identifiants auto-générés par défaut, à savoir le jeton d'accès pour ce guide.

  • Allez dans le tableau des appareils
  • Cliquez sur la ligne de l’appareil pour ouvrir les détails
  • Appuyez sur le bouton \"Copier le jeton d'accès\"

Utilisez les commandes simples suivantes pour publier des données via HTTP. N'oubliez pas de remplacer $ACCESS_TOKEN par le jeton d'accès de votre appareil :

", "ubuntu": { "install-curl": "Installer cURL pour Ubuntu :" }, @@ -9448,13 +9475,13 @@ "windows": { "install-curl": "Depuis Windows 10 b17063, cURL est disponible par défaut." }, - "replace-access-token": "Remplacez $ACCESS_TOKEN par le jeton de votre dispositif :", + "replace-access-token": "Remplacez $ACCESS_TOKEN par le jeton de votre appareil :", "content-after": "

Vous pouvez également utiliser d'autres protocoles tels que MQTT, CoAP, etc.

Suivez la documentation pour savoir comment procéder :

", - "how-to-connect-device": "Comment connecter un dispositif" + "how-to-connect-device": "Comment connecter un appareil" }, "step3": { "title": "Créer un tableau de bord", - "content": "

Créez un tableau de bord pour visualiser les données des entités telles que les dispositifs, les actifs, etc.

Suivez la documentation pour savoir comment procéder :

", + "content": "

Créez un tableau de bord pour visualiser les données des entités telles que les appareils, les actifs, etc.

Suivez la documentation pour savoir comment procéder :

", "how-to-create-dashboard": "Comment créer un tableau de bord" }, "step4": { @@ -9466,13 +9493,13 @@ "step5": { "title": "Créer une alarme", "content-before": "

Pour déclencher l'alarme, envoyez une nouvelle valeur de télémétrie de 26°C ou plus.

", - "replace-access-token": "Remplacez $ACCESS_TOKEN par le jeton de votre dispositif :", + "replace-access-token": "Remplacez $ACCESS_TOKEN par le jeton de votre appareil :", "content-after": "

Suivez la documentation pour savoir comment procéder :

", "how-to-create-alarm": "Comment créer une alarme" }, "step6": { "title": "Créer un client et partager le tableau de bord", - "content": "

En créant des tableaux de bord pour les utilisateurs finaux, un utilisateur client ne peut voir que ses propres dispositifs. Les données d'autres clients lui seront invisibles.

Suivez la documentation pour savoir comment procéder :

" + "content": "

En créant des tableaux de bord pour les utilisateurs finaux, un utilisateur client ne peut voir que ses propres appareils. Les données d'autres clients lui seront invisibles.

Suivez la documentation pour savoir comment procéder :

" } } } @@ -9522,4 +9549,4 @@ "language": { "language": "Langue" } -} +} \ No newline at end of file diff --git a/ui-ngx/src/assets/locale/locale.constant-it_IT.json b/ui-ngx/src/assets/locale/locale.constant-it_IT.json index add8432b40..45f2819123 100644 --- a/ui-ngx/src/assets/locale/locale.constant-it_IT.json +++ b/ui-ngx/src/assets/locale/locale.constant-it_IT.json @@ -237,12 +237,12 @@ "no-oauth2-clients": "Nessun client OAuth 2.0 trovato", "search-oauth2-clients": "Cerca client OAuth 2.0", "delete-client-title": "Sei sicuro di voler eliminare il client OAuth 2.0 '{{clientName}}'?", - "delete-client-text": "Attenzione, dopo la conferma il client e tutti i dati correlati saranno irrimediabilmente persi.", + "delete-client-text": "Attenzione, dopo la conferma il client e tutti i dati correlati diventeranno irrecuperabili.", "delete-mobile-app-title": "Sei sicuro di voler eliminare l'applicazione mobile '{{applicationName}}'?", - "delete-mobile-app-text": "Attenzione, dopo la conferma l'applicazione mobile e tutti i dati correlati saranno irrimediabilmente persi.", + "delete-mobile-app-text": "Attenzione, dopo la conferma l'applicazione mobile e tutti i dati correlati diventeranno irrecuperabili.", "title": "Titolo", "client-title-required": "Il titolo è obbligatorio", - "client-title-max-length": "Il titolo deve essere inferiore a 100 caratteri", + "client-title-max-length": "Il titolo dovrebbe essere lungo meno di 100 caratteri", "advanced-settings": "Impostazioni avanzate", "domain-details": "Dettagli dominio", "no-domains": "Nessun dominio trovato", @@ -440,15 +440,15 @@ "authentication-settings": "Impostazioni di autenticazione", "auth-method": "Metodo di autenticazione", "auth-method-username-password": "Password / token di accesso", - "auth-method-username-password-hint": "Gli utenti GitHub devono usare token di accesso con permessi di scrittura al repository.", + "auth-method-username-password-hint": "Gli utenti di GitHub devono utilizzare i token di accesso con permessi di scrittura sul repository.", "auth-method-private-key": "Chiave privata", "password-access-token": "Password / token di accesso", "change-password-access-token": "Cambia password / token di accesso", "private-key": "Chiave privata", - "drop-private-key-file-or": "Trascina e rilascia un file con chiave privata oppure", - "passphrase": "Passphrase", - "enter-passphrase": "Inserisci passphrase", - "change-passphrase": "Cambia passphrase", + "drop-private-key-file-or": "Trascina e rilascia un file di chiave privata oppure", + "passphrase": "Frase segreta", + "enter-passphrase": "Inserisci la frase segreta", + "change-passphrase": "Cambia la frase segreta", "check-access": "Verifica accesso", "check-repository-access-success": "Accesso al repository verificato con successo!", "delete-repository-settings-title": "Sei sicuro di voler eliminare le impostazioni del repository?", @@ -540,12 +540,18 @@ "resources": "Risorse", "notifications": "Notifiche", "notifications-settings": "Impostazioni notifiche", - "slack-api-token": "Token API Slack", + "slack-api-token": "Token API di Slack", "slack": "Slack", - "slack-settings": "Impostazioni Slack", + "slack-settings": "Impostazioni di Slack", "mobile-settings": "Impostazioni mobile", "firebase-service-account-file": "File JSON delle credenziali dell'account di servizio Firebase", - "select-firebase-service-account-file": "Trascina e rilascia il file delle credenziali dell'account di servizio Firebase oppure " + "select-firebase-service-account-file": "Trascina e rilascia il file delle credenziali dell'account di servizio Firebase oppure", + "trendz": "Trendz", + "trendz-settings": "Impostazioni di Trendz", + "trendz-url": "URL di Trendz", + "trendz-url-required": "L'URL di Trendz è obbligatorio", + "trendz-api-key": "Chiave API di Trendz", + "trendz-enable": "Abilita Trendz" }, "alarm": { "alarm": "Allarme", @@ -671,14 +677,14 @@ "add": "Aggiungi alias", "edit": "Modifica alias", "name": "Nome alias", - "name-required": "Il nome dell'alias è obbligatorio", + "name-required": "Il nome alias è obbligatorio", "duplicate-alias": "Esiste già un alias con lo stesso nome.", - "filter-type-single-entity": "Singola entità", - "filter-type-entity-list": "Lista di entità", + "filter-type-single-entity": "Entità singola", + "filter-type-entity-list": "Elenco di entità", "filter-type-entity-name": "Nome entità", - "filter-type-entity-type": "Tipo entità", - "filter-type-state-entity": "Entità da stato della dashboard", - "filter-type-state-entity-description": "Entità presa dai parametri dello stato della dashboard", + "filter-type-entity-type": "Tipo di entità", + "filter-type-state-entity": "Entità dallo stato del dashboard", + "filter-type-state-entity-description": "Entità presa dai parametri dello stato del dashboard", "filter-type-asset-type": "Tipo di asset", "filter-type-asset-type-description": "Asset di tipo '{{assetTypes}}'", "filter-type-asset-type-and-name-description": "Asset di tipo '{{assetTypes}}' con nome che inizia con '{{prefix}}'", @@ -704,39 +710,40 @@ "filter-type-apiUsageState": "Stato utilizzo API", "entity-filter": "Filtro entità", "resolve-multiple": "Risolvi come entità multiple", - "resolve-multiple-hint": "Abilita per visualizzare dati da tutte le entità filtrate simultaneamente.\nSe disabilitato, il widget mostra i dati della sola entità selezionata.", + "resolve-multiple-hint": "Abilita per visualizzare i dati di tutte le entità filtrate contemporaneamente. \nSe disabilitato, il widget mostrerà solo i dati dell'entità selezionata.", "filter-type": "Tipo di filtro", "filter-type-required": "Il tipo di filtro è obbligatorio.", "entity-filter-no-entity-matched": "Nessuna entità corrispondente al filtro specificato trovata.", "no-entity-filter-specified": "Nessun filtro entità specificato", - "root-state-entity": "Usa entità stato dashboard come radice", - "last-level-relation": "Recupera solo ultima relazione di livello", + "root-state-entity": "Usa l'entità dello stato del dashboard come root", + "last-level-relation": "Recupera solo la relazione dell'ultimo livello", "root-entity": "Entità radice", "state-entity-parameter-name": "Nome parametro entità stato", "default-state-entity": "Entità stato predefinita", - "default-entity-parameter-name": "Predefinito", - "max-relation-level": "Livello massimo relazione", + "default-entity-parameter-name": "Per impostazione predefinita", + "query-options": "Opzioni di query", + "max-relation-level": "Livello massimo di relazione", "unlimited-level": "Livello illimitato", - "state-entity": "Entità stato della dashboard", + "state-entity": "Entità stato del dashboard", "all-entities": "Tutte le entità", "any-relation": "qualsiasi" }, "asset": { "asset": "Asset", - "assets": "Asset", - "management": "Gestione asset", + "assets": "Assets", + "management": "Gestione degli asset", "view-assets": "Visualizza asset", "add": "Aggiungi asset", - "asset-type-max-length": "Il tipo di asset deve essere inferiore a 256 caratteri", + "asset-type-max-length": "Il tipo di asset deve essere inferiore a 256", "assign-to-customer": "Assegna al cliente", - "assign-asset-to-customer": "Assegna asset al cliente", + "assign-asset-to-customer": "Assegna Asset(i) al Cliente", "assign-asset-to-customer-text": "Seleziona gli asset da assegnare al cliente", "no-assets-text": "Nessun asset trovato", - "assign-to-customer-text": "Seleziona il cliente a cui assegnare l'asset", + "assign-to-customer-text": "Seleziona il cliente a cui assegnare gli asset", "public": "Pubblico", "assignedToCustomer": "Assegnato al cliente", - "make-public": "Rendi pubblico l'asset", - "make-private": "Rendi privato l'asset", + "make-public": "Rendi asset pubblico", + "make-private": "Rendi asset privato", "unassign-from-customer": "Rimuovi assegnazione dal cliente", "delete": "Elimina asset", "asset-public": "L'asset è pubblico", @@ -859,11 +866,11 @@ "alarm": "Allarme", "alarms-created": "Allarmi creati", "queue-stats": "Statistiche coda", - "processing-failures-and-timeouts": "Errori e timeout di elaborazione", + "processing-failures-and-timeouts": "Errori di elaborazione e timeout", "exceptions": "Eccezioni", - "alarms-created-daily-activity": "Attività giornaliera allarmi creati", - "alarms-created-hourly-activity": "Attività oraria allarmi creati", - "alarms-created-monthly-activity": "Attività mensile allarmi creati", + "alarms-created-daily-activity": "Attività giornaliera di allarmi creati", + "alarms-created-hourly-activity": "Attività oraria di allarmi creati", + "alarms-created-monthly-activity": "Attività mensile di allarmi creati", "data-points": "Punti dati", "data-points-storage-days": "Giorni di conservazione dei punti dati", "device-api": "API dispositivo", @@ -908,31 +915,36 @@ "telemetry-persistence-hourly-activity": "Attività oraria persistenza telemetria", "telemetry-persistence-monthly-activity": "Attività mensile persistenza telemetria", "transport": "Trasporto", - "transport-daily-activity": "Attività giornaliera trasporto", - "transport-data-points": "Punti dati trasporto", - "transport-hourly-activity": "Attività oraria trasporto", - "transport-messages": "Messaggi trasporto", - "transport-monthly-activity": "Attività mensile trasporto", + "transport-daily-activity": "Attività giornaliera del trasporto", + "transport-data-points": "Punti dati del trasporto", + "transport-hourly-activity": "Attività oraria del trasporto", + "transport-messages": "Messaggi del trasporto", + "transport-monthly-activity": "Attività mensile del trasporto", "view-details": "Visualizza dettagli", "view-statistics": "Visualizza statistiche" }, "api-limit": { - "cassandra-queries": "Query Cassandra", + "cassandra-write-queries-core": "Query di scrittura Cassandra tramite Rest API", + "cassandra-read-queries-core": "Query di lettura Cassandra tramite Rest API e WS telemetry", + "cassandra-write-queries-rule-engine": "Query di scrittura Cassandra della telemetria Rule Engine", + "cassandra-read-queries-rule-engine": "Query di lettura Cassandra della telemetria Rule Engine", + "cassandra-write-queries-monolith": "Query di scrittura Cassandra della telemetria Monolith", + "cassandra-read-queries-monolith": "Query di lettura Cassandra della telemetria Monolith", "entity-version-creation": "Creazione versione entità", "entity-version-load": "Caricamento versione entità", "notification-requests": "Richieste di notifica", "notification-requests-per-rule": "Richieste di notifica per regola", "rest-api-requests": "Richieste REST API", "rest-api-requests-per-customer": "Richieste REST API per cliente", - "transport-messages": "Messaggi trasporto", - "transport-messages-per-device": "Messaggi trasporto per dispositivo", - "transport-messages-per-gateway": "Messaggi trasporto per gateway", - "transport-messages-per-gateway-device": "Messaggi trasporto per dispositivo gateway", + "transport-messages": "Messaggi di trasporto", + "transport-messages-per-device": "Messaggi di trasporto per dispositivo", + "transport-messages-per-gateway": "Messaggi di trasporto per gateway", + "transport-messages-per-gateway-device": "Messaggi di trasporto per dispositivo gateway", "ws-updates-per-session": "Aggiornamenti WS per sessione", - "edge-events": "Eventi edge", - "edge-events-per-edge": "Eventi per edge", - "edge-uplink-messages": "Messaggi uplink edge", - "edge-uplink-messages-per-edge": "Messaggi uplink per edge" + "edge-events": "Eventi Edge", + "edge-events-per-edge": "Eventi Edge per nodo Edge", + "edge-uplink-messages": "Messaggi uplink Edge", + "edge-uplink-messages-per-edge": "Messaggi uplink Edge per nodo Edge" }, "audit-log": { "audit": "Audit", @@ -1025,7 +1037,7 @@ "argument-asset": "Asset", "argument-customer": "Cliente", "argument-tenant": "Tenant corrente", - "argument-type": "Tipo argomento", + "argument-type": "Tipo di argomento", "see-debug-events": "Vedi eventi di debug", "attribute": "Attributo", "copy-argument-name": "Copia nome argomento", @@ -1057,10 +1069,11 @@ "delete-multiple-title": "Sei sicuro di voler eliminare { count, plural, =1 {1 campo calcolato} other {# campi calcolati} }?", "delete-multiple-text": "Attenzione, dopo la conferma tutti i campi calcolati selezionati saranno eliminati e tutti i dati correlati saranno irrimediabilmente persi.", "test-with-this-message": "Testa con questo messaggio", + "use-latest-timestamp": "Usa il timestamp più recente", "hint": { - "arguments-simple-with-rolling": "Il campo calcolato di tipo semplice non deve contenere chiavi con tipo rolling su serie temporale.", + "arguments-simple-with-rolling": "Il campo calcolato di tipo semplice non deve contenere chiavi con tipo rolling delle serie temporali.", "arguments-empty": "Gli argomenti non devono essere vuoti.", - "expression-required": "L'espressione è obbligatoria.", + "expression-required": "Espressione obbligatoria.", "expression-invalid": "Espressione non valida", "expression-max-length": "La lunghezza dell'espressione deve essere inferiore a 255 caratteri.", "argument-name-required": "Il nome dell'argomento è obbligatorio.", @@ -1068,13 +1081,110 @@ "argument-name-duplicate": "Esiste già un argomento con questo nome.", "argument-name-max-length": "Il nome dell'argomento deve essere inferiore a 256 caratteri.", "argument-name-forbidden": "Il nome dell'argomento è riservato e non può essere utilizzato.", - "argument-type-required": "Il tipo dell'argomento è obbligatorio.", + "argument-type-required": "Il tipo di argomento è obbligatorio.", "max-args": "Numero massimo di argomenti raggiunto.", - "decimals-range": "I decimali di default devono essere un numero compreso tra 0 e 15.", - "expression": "L'espressione di default dimostra come trasformare una temperatura da Fahrenheit a Celsius.", - "arguments-entity-not-found": "Entità di destinazione dell'argomento non trovata." + "decimals-range": "Per impostazione predefinita, i decimali devono essere un numero compreso tra 0 e 15.", + "expression": "L'espressione predefinita dimostra come trasformare una temperatura da Fahrenheit a Celsius.", + "arguments-entity-not-found": "Entità di destinazione dell'argomento non trovata.", + "use-latest-timestamp": "Se abilitato, il valore calcolato verrà salvato utilizzando il timestamp più recente dalla telemetria degli argomenti, invece dell'orario del server." } }, + "ai-models": { + "ai-models": "Modelli AI", + "ai-model": "Modello AI", + "model": "Modello", + "name": "Nome", + "ai-provider": "Fornitore AI", + "no-found": "Nessun modello AI trovato", + "list": "{ count, plural, =1 {Un modello} other {Elenco di # modelli} }", + "selected-fields": "{ count, plural, =1 {1 modello} other {# modelli} } selezionati", + "add": "Aggiungi modello", + "delete-model-title": "Sei sicuro di voler eliminare il modello '{{modelName}}'?", + "delete-model-text": "Attenzione, dopo la conferma il modello e tutti i dati correlati diventeranno irrecuperabili.", + "delete-models-title": "Sei sicuro di voler eliminare { count, plural, =1 {1 modello} other {# modelli} }?", + "delete-models-text": "Attenzione, dopo la conferma tutti i modelli selezionati verranno rimossi e tutti i dati correlati diventeranno irrecuperabili.", + "ai-providers": { + "openai": "OpenAI", + "azure-openai": "Azure OpenAI", + "google-ai-gemini": "Google AI Gemini", + "google-vertex-ai-gemini": "Google Vertex AI Gemini", + "mistral-ai": "Mistral AI", + "anthropic": "Anthropic", + "amazon-bedrock": "Amazon Bedrock", + "github-models": "Modelli GitHub", + "ollama": "Ollama" + }, + "name-required": "Il nome è obbligatorio.", + "name-max-length": "Il nome deve contenere al massimo 255 caratteri.", + "provider": "Provider", + "api-key": "Chiave API", + "api-key-required": "La chiave API è obbligatoria.", + "api-key-open-ai-required": "La chiave API è obbligatoria quando si utilizza l'API ufficiale di OpenAI.", + "project-id": "ID progetto", + "project-id-required": "L'ID progetto è obbligatorio.", + "location": "Località", + "location-required": "La località è obbligatoria.", + "service-account-key-file": "File della chiave dell'account di servizio", + "service-account-key-file-required": "Il file della chiave dell'account di servizio è obbligatorio.", + "no-file": "Nessun file selezionato.", + "drop-file": "Trascina un file o clicca per selezionare un file da caricare.", + "personal-access-token": "Token di accesso personale", + "personal-access-token-required": "Il token di accesso personale è obbligatorio.", + "configuration": "Configurazione", + "model-id": "ID modello", + "model-id-required": "L'ID del modello è obbligatorio.", + "deployment-name": "Nome del deployment", + "deployment-name-required": "Il nome del deployment è obbligatorio.", + "set": "Imposta", + "region": "Regione", + "region-required": "La regione è obbligatoria.", + "access-key-id": "ID chiave di accesso", + "access-key-id-required": "L'ID della chiave di accesso è obbligatorio.", + "secret-access-key": "Chiave di accesso segreta", + "secret-access-key-required": "La chiave di accesso segreta è obbligatoria.", + "temperature": "Temperatura", + "temperature-hint": "Regola il livello di casualità nell'output del modello. Valori più alti aumentano la casualità, mentre valori più bassi la riducono.", + "temperature-min": "Deve essere maggiore o uguale a 0.", + "top-p": "Top P", + "top-p-hint": "Crea un insieme dei token più probabili tra cui il modello può scegliere. Valori più alti creano un insieme più ampio e variegato, mentre quelli più bassi lo restringono.", + "top-p-min-max": "Deve essere maggiore di 0 e al massimo 1.", + "top-k": "Top K", + "top-k-hint": "Limita le scelte del modello a un insieme fisso dei \"K\" token più probabili.", + "top-k-min": "Deve essere maggiore o uguale a 0.", + "presence-penalty": "Penalità di presenza", + "presence-penalty-hint": "Applica una penalità fissa alla probabilità di un token se è già apparso nel testo.", + "frequency-penalty": "Penalità di frequenza", + "frequency-penalty-hint": "Applica una penalità alla probabilità di un token in base alla sua frequenza nel testo.", + "max-output-tokens": "Numero massimo di token in output", + "max-output-tokens-hint": "Imposta il numero massimo di token che il\nmodello può generare in una singola risposta.", + "context-length": "Lunghezza del contesto", + "context-length-hint": "Definisce la dimensione della finestra di contesto in token. Questo valore imposta il limite totale di memoria per il modello, includendo sia l'input dell'utente che la risposta generata.", + "endpoint": "Endpoint", + "endpoint-required": "L'endpoint è obbligatorio.", + "baseurl": "URL base", + "baseurl-required": "L'URL base è obbligatorio.", + "service-version": "Versione del servizio", + "check-connectivity": "Verifica connettività", + "check-connectivity-success": "La richiesta di test è andata a buon fine", + "check-connectivity-failed": "La richiesta di test non è riuscita", + "no-model-matching": "Nessun modello corrispondente a '{{entity}}' trovato.", + "model-required": "Il modello è obbligatorio.", + "no-model-text": "Nessun modello trovato.", + "authentication": "Autenticazione", + "authentication-basic-hint": "Utilizza l'autenticazione HTTP Basic standard. Il nome utente e la password verranno combinati, codificati in Base64 e inviati in un'intestazione \"Authorization\" con ogni richiesta al server Ollama.", + "authentication-token-hint": "Utilizza l'autenticazione con token Bearer. Il token fornito verrà inviato direttamente in un'intestazione \"Authorization\" con ogni richiesta al server Ollama.", + "authentication-type": { + "none": "Nessuna", + "basic": "Basic", + "token": "Token" + }, + "username": "Nome utente", + "username-required": "Il nome utente è obbligatorio.", + "password": "Password", + "password-required": "La password è obbligatoria.", + "token": "Token", + "token-required": "Il token è obbligatorio." + }, "confirm-on-exit": { "message": "Hai modifiche non salvate. Sei sicuro di voler lasciare questa pagina?", "html-message": "Hai modifiche non salvate.
Sei sicuro di voler lasciare questa pagina?", @@ -1236,15 +1346,15 @@ "assign-dashboard-to-customer-text": "Seleziona le dashboard da assegnare al cliente", "assign-to-customer-text": "Seleziona il cliente a cui assegnare la dashboard", "assign-to-customer": "Assegna al cliente", - "unassign-from-customer": "Disassegna dal cliente", + "unassign-from-customer": "Rimuovi assegnazione dal cliente", "make-public": "Rendi dashboard pubblica", "make-private": "Rendi dashboard privata", "manage-assigned-customers": "Gestisci clienti assegnati", "assigned-customers": "Clienti assegnati", "assign-to-customers": "Assegna dashboard ai clienti", "assign-to-customers-text": "Seleziona i clienti a cui assegnare la dashboard", - "unassign-from-customers": "Disassegna dashboard dai clienti", - "unassign-from-customers-text": "Seleziona i clienti da cui disassegnare la dashboard", + "unassign-from-customers": "Rimuovi dashboard dai clienti", + "unassign-from-customers-text": "Seleziona i clienti da cui rimuovere la dashboard", "no-dashboards-text": "Nessuna dashboard trovata", "no-widgets": "Nessun widget configurato", "add-widget": "Aggiungi nuovo widget", @@ -1724,7 +1834,7 @@ "type-number": "Numero", "type-switch": "Interruttore", "type-select": "Selezione", - "type-radios": "Pulsanti radio", + "type-radios": "Pulsanti di scelta", "type-datetime": "Data/Ora", "type-image": "Immagine", "type-javascript": "JavaScript", @@ -1747,13 +1857,14 @@ "remove-property": "Rimuovi proprietà", "default-value": "Valore predefinito", "value-required": "Valore richiesto", - "number-settings": "Impostazioni numeriche", + "number-settings": "Impostazioni numero", "min": "Min", "max": "Max", "step": "Passo", "selected-options-limit": "Limite opzioni selezionate", "advanced-ui-settings": "Impostazioni UI avanzate", "disable-on-property": "Disabilita in base alla proprietà", + "disable-on-property-none": "Nessuna (campo sempre abilitato)", "display-condition-function": "Funzione di condizione di visualizzazione", "sub-label": "Sotto etichetta", "vertical-divider-after": "Divisore verticale dopo", @@ -1787,7 +1898,8 @@ "array-item": "Elemento dell'array", "item-type": "Tipo di elemento", "item-name": "Nome dell'elemento", - "no-items": "Nessun elemento" + "no-items": "Nessun elemento", + "support-unit-conversion": "Supporta la conversione delle unità" }, "clear-form": "Cancella modulo", "clear-form-prompt": "Sei sicuro di voler rimuovere tutte le proprietà del modulo?", @@ -1795,7 +1907,7 @@ "export-form": "Esporta modulo in JSON", "json-file": "File JSON", "json-content": "Contenuto JSON", - "invalid-form-json-file-error": "Impossibile importare il modulo da JSON: struttura dei dati JSON non valida." + "invalid-form-json-file-error": "Impossibile importare il modulo da JSON: struttura dei dati JSON del modulo non valida." }, "asset-profile": { "asset-profile": "Profilo asset", @@ -1896,21 +2008,22 @@ "set-default-device-profile-text": "Dopo la conferma, il profilo dispositivo sarà impostato come predefinito e verrà utilizzato per i nuovi dispositivi senza profilo specificato.", "no-device-profiles-found": "Nessun profilo dispositivo trovato.", "create-new-device-profile": "Creane uno nuovo!", - "mqtt-device-topic-filters": "Filtri topic dispositivo MQTT", - "mqtt-device-topic-filters-unique": "I filtri topic del dispositivo MQTT devono essere unici.", - "mqtt-device-topic-filters-spark-plug": "Nodo Edge of Network (EoN) MQTT Sparkplug B.", - "mqtt-device-topic-filters-spark-plug-hint": "Consente connessioni da nodi EoN con payload e formato topic Sparkplug B.", + "mqtt-device-topic-filters": "Filtri dei topic MQTT del dispositivo", + "mqtt-device-topic-filters-unique": "I filtri dei topic MQTT del dispositivo devono essere unici.", + "mqtt-device-topic-filters-spark-plug": "Nodo Sparkplug B Edge of Network (EoN) MQTT.", + "mqtt-device-topic-filters-spark-plug-hint": "Consente connessioni dai nodi EoN con payload e formato dei topic Sparkplug B.", "mqtt-device-topic-filters-spark-plug-attribute-metric-names": "Metriche SparkPlug da salvare come attributi.", - "mqtt-device-topic-filters-spark-plug-attribute-metric-names-hint": "Nomi delle metriche SparkPlug che verranno salvate come attributi del dispositivo. Tutte le altre metriche saranno archiviate come telemetria.", - "mqtt-device-payload-type": "Payload dispositivo MQTT", + "mqtt-device-topic-filters-spark-plug-attribute-metric-names-hint": "Nomi delle metriche SparkPlug che verranno salvate come attributi del dispositivo. Tutte le altre metriche verranno salvate come telemetria del dispositivo.", + "mqtt-device-payload-type": "Payload MQTT del dispositivo", "mqtt-device-payload-type-json": "JSON", "mqtt-device-payload-type-proto": "Protobuf", - "mqtt-enable-compatibility-with-json-payload-format": "Abilita compatibilità con altri formati payload.", - "mqtt-enable-compatibility-with-json-payload-format-hint": "Se abilitato, la piattaforma utilizzerà di default il formato payload Protobuf. In caso di errore di parsing, tenterà di utilizzare il formato JSON. Utile per la retrocompatibilità durante aggiornamenti firmware. Modalità soggetta a un leggero degrado delle prestazioni.", - "mqtt-use-json-format-for-default-downlink-topics": "Usa formato Json per topic di downlink predefiniti", - "mqtt-use-json-format-for-default-downlink-topics-hint": "Usato per inviare attributi e RPC via Json su v1/devices/me/.... Non influisce sui topic v2.", - "mqtt-send-ack-on-validation-exception": "Invia PUBACK in caso di errore di validazione PUBLISH", - "mqtt-send-ack-on-validation-exception-hint": "Se abilitato, invia l'acknowledgment invece di chiudere la sessione MQTT in caso di errore di validazione.", + "mqtt-enable-compatibility-with-json-payload-format": "Abilita la compatibilità con altri formati di payload.", + "mqtt-enable-compatibility-with-json-payload-format-hint": "Quando abilitato, la piattaforma utilizzerà il formato di payload Protobuf come predefinito. Se l'analisi fallisce, la piattaforma tenterà di utilizzare il formato di payload JSON. Utile per la compatibilità retroattiva durante gli aggiornamenti firmware. Ad esempio, la versione iniziale del firmware utilizza JSON, mentre la nuova versione utilizza Protobuf. Durante il processo di aggiornamento del firmware della flotta di dispositivi, è necessario supportare contemporaneamente sia Protobuf che JSON. La modalità di compatibilità introduce un leggero degrado delle prestazioni, perciò si consiglia di disabilitarla una volta aggiornati tutti i dispositivi.", + "mqtt-use-json-format-for-default-downlink-topics": "Utilizza il formato JSON per i topic downlink predefiniti", + "mqtt-use-json-format-for-default-downlink-topics-hint": "Quando abilitato, la piattaforma utilizzerà il formato JSON per inviare attributi e RPC tramite i seguenti topic: v1/devices/me/attributes/response/$request_id, v1/devices/me/attributes, v1/devices/me/rpc/request/$request_id, v1/devices/me/rpc/response/$request_id. Questa impostazione non influisce sulle sottoscrizioni di attributi e RPC inviate tramite i nuovi topic (v2): v2/a/res/$request_id, v2/a, v2/r/req/$request_id, v2/r/res/$request_id. Dove $request_id è un identificatore di richiesta intero.", + "mqtt-send-ack-on-validation-exception": "Invia PUBACK in caso di errore di validazione del messaggio PUBLISH", + "mqtt-send-ack-on-validation-exception-hint": "Per impostazione predefinita, la piattaforma chiuderà la sessione MQTT in caso di fallimento della validazione del messaggio. Quando abilitato, la piattaforma invierà un acknowledgment di pubblicazione anziché chiudere la sessione.", + "mqtt-protocol-version": "Versione del protocollo", "snmp-add-mapping": "Aggiungi mapping SNMP", "snmp-mapping-not-configured": "Nessun mapping OID configurato per time series/telemetria", "snmp-timseries-or-attribute-name": "Nome time series/attributo per mapping", @@ -2171,24 +2284,27 @@ "add-lwm2m-server-config": "Aggiungi server LwM2M", "no-config-servers": "Nessun server configurato", "others-tab": "Altre impostazioni", - "client-strategy": "Strategia client alla connessione", + "ota-update": "Aggiornamento OTA", + "use-object-19-for-ota-update": "Usa l'Oggetto 19 per i metadati dei file OTA (checksum, dimensione, versione, nome)", + "use-object-19-for-ota-update-hint": "Utilizza Resource ObjectId = 19 per gli aggiornamenti OTA: FirmWare → InstanceId = 65534, SoftWare → InstanceId = 65535. Il formato dei dati è JSON codificato in Base64. Questo JSON contiene i metadati del file OTA (informazioni del file): \"Checksum\" (SHA256). Campi aggiuntivi: \"Title\" (nome OTA), \"Version\" (versione OTA), \"File Name\" (nome file per archiviare l’OTA sul client), \"File Size\" (dimensione OTA in byte).", + "client-strategy": "Strategia del client durante la connessione", "client-strategy-label": "Strategia", - "client-strategy-only-observe": "Solo richiesta di osservazione dopo la connessione iniziale", - "client-strategy-read-all": "Leggi tutte le risorse e invia richiesta di osservazione dopo la registrazione", + "client-strategy-only-observe": "Solo richiesta Observe al client dopo la connessione iniziale", + "client-strategy-read-all": "Leggi tutte le risorse e invia una richiesta Observe al client dopo la registrazione", "fw-update": "Aggiornamento firmware", "fw-update-strategy": "Strategia di aggiornamento firmware", - "fw-update-strategy-data": "Invia aggiornamento come file binario usando Oggetto 19, Risorsa 0 (Data)", - "fw-update-strategy-package": "Invia aggiornamento come file binario usando Oggetto 5, Risorsa 0 (Package)", - "fw-update-strategy-package-uri": "Genera URL CoAP univoco e invia aggiornamento come Oggetto 5, Risorsa 1 (Package URI)", + "fw-update-strategy-data": "Invia l’aggiornamento firmware come file binario utilizzando l'Oggetto 19 e la Risorsa 0 (Data)", + "fw-update-strategy-package": "Invia l’aggiornamento firmware come file binario utilizzando l'Oggetto 5 e la Risorsa 0 (Package)", + "fw-update-strategy-package-uri": "Genera automaticamente un URL CoAP univoco per scaricare il pacchetto e invia l’aggiornamento firmware tramite Oggetto 5 e Risorsa 1 (Package URI)", "sw-update": "Aggiornamento software", "sw-update-strategy": "Strategia di aggiornamento software", - "sw-update-strategy-package": "Invia file binario usando Oggetto 9, Risorsa 2 (Package)", - "sw-update-strategy-package-uri": "Genera URL CoAP univoco per scaricare il pacchetto e invia aggiornamento usando Oggetto 9, Risorsa 3 (Package URI)", - "fw-update-resource": "Risorsa CoAP aggiornamento firmware", - "fw-update-resource-required": "Risorsa CoAP aggiornamento firmware obbligatoria.", - "sw-update-resource": "Risorsa CoAP aggiornamento software", - "sw-update-resource-required": "Risorsa CoAP aggiornamento software obbligatoria.", - "config-json-tab": "Configurazione JSON profilo dispositivo", + "sw-update-strategy-package": "Invia il file binario utilizzando l'Oggetto 9 e la Risorsa 2 (Package)", + "sw-update-strategy-package-uri": "Genera automaticamente un URL CoAP univoco per scaricare il pacchetto e invia l’aggiornamento software tramite Oggetto 9 e Risorsa 3 (Package URI)", + "fw-update-resource": "Risorsa CoAP per aggiornamento firmware", + "fw-update-resource-required": "La risorsa CoAP per l’aggiornamento firmware è obbligatoria.", + "sw-update-resource": "Risorsa CoAP per aggiornamento software", + "sw-update-resource-required": "La risorsa CoAP per l’aggiornamento software è obbligatoria.", + "config-json-tab": "Profilo dispositivo JSON", "attributes-name": { "min-period": "Periodo minimo", "max-period": "Periodo massimo", @@ -2198,10 +2314,20 @@ "min-evaluation-period": "Periodo minimo di valutazione", "max-evaluation-period": "Periodo massimo di valutazione" }, - "default-object-id": "Versione oggetto predefinita (Attributo)", + "default-object-id": "Versione predefinita dell'Oggetto (Attributo)", "default-object-id-ver": { "v1-0": "1.0", - "v1-1": "1.1" + "v1-1": "1.1", + "v1-2": "1.2" + }, + "observe-strategy": { + "observe-strategy": "Strategia Observe", + "single": "Singola", + "single-description": "Una richiesta Observe per risorsa (maggiore precisione, più traffico di rete)", + "composite-all": "Composita globale", + "composite-all-description": "Tutte le risorse sono osservate con un’unica richiesta Composite Observe (più efficiente, meno flessibile)", + "composite-by-object": "Composita per oggetti", + "composite-by-object-description": "Le risorse sono raggruppate per tipo di oggetto e osservate tramite richieste Composite Observe separate (approccio bilanciato)" } }, "snmp": { @@ -2514,16 +2640,18 @@ "type-rulechains": "Catene di regole", "list-of-rulechains": "{ count, plural, =1 {Una catena di regole} other {Elenco di # catene di regole} }", "rulechain-name-starts-with": "Catene di regole i cui nomi iniziano con '{{prefix}}'", - "type-rulenode": "Nodo regola", - "type-rulenodes": "Nodi regola", - "list-of-rulenodes": "{ count, plural, =1 {Un nodo regola} other {Elenco di # nodi regola} }", - "rulenode-name-starts-with": "Nodi regola i cui nomi iniziano con '{{prefix}}'", + "type-rulenode": "Nodo rule", + "type-rulenodes": "Nodi rule", + "list-of-rulenodes": "{ count, plural, =1 {Un nodo rule} other {Elenco di # nodi rule} }", + "rulenode-name-starts-with": "Nodi rule i cui nomi iniziano con '{{prefix}}'", "type-current-customer": "Cliente corrente", "type-current-tenant": "Tenant corrente", "type-current-user": "Utente corrente", - "type-current-user-owner": "Proprietario utente corrente", + "type-current-user-owner": "Proprietario dell’utente corrente", "type-calculated-field": "Campo calcolato", "type-calculated-fields": "Campi calcolati", + "type-ai-model": "Modello AI", + "type-ai-models": "Modelli AI", "type-widgets-bundle": "Pacchetto widget", "type-widgets-bundles": "Pacchetti widget", "list-of-widgets-bundles": "{ count, plural, =1 {Un pacchetto widget} other {Elenco di # pacchetti widget} }", @@ -2553,6 +2681,8 @@ "type-tb-resources": "Risorse", "list-of-tb-resources": "{ count, plural, =1 {Una risorsa} other {Elenco di # risorse} }", "type-ota-package": "Pacchetto OTA", + "type-ota-packages": "Pacchetti OTA", + "list-of-ota-packages": "{ count, plural, =1 {Un pacchetto OTA} other {Elenco di # pacchetti OTA} }", "type-rpc": "RPC", "type-queue": "Coda", "type-queue-stats": "Statistiche coda", @@ -2700,9 +2830,9 @@ "timeseries-placeholder": "Serie temporali", "target-entity": "Entità di destinazione", "attributes-propagation": "Propagazione degli attributi", - "attributes-propagation-hint": "La vista entità copierà automaticamente gli attributi specificati dall'entità di destinazione ogni volta che viene salvata o aggiornata. Per motivi di prestazioni, gli attributi dell'entità di destinazione non vengono propagati ad ogni modifica. È possibile abilitare la propagazione automatica configurando un nodo 'copy to view' nella catena di regole e collegando i messaggi 'Post attributes' e 'Attributes Updated' a tale nodo.", - "timeseries-data": "Dati serie temporali", - "timeseries-data-hint": "Configura le chiavi di dati delle serie temporali dell'entità di destinazione accessibili alla vista entità. Questi dati sono di sola lettura.", + "attributes-propagation-hint": "La Entity View copierà automaticamente gli attributi specificati dall’entità di destinazione ogni volta che salvi o aggiorni questa entity view. Per motivi di prestazioni, gli attributi dell’entità di destinazione non vengono propagati alla entity view a ogni modifica degli attributi. Puoi abilitare la propagazione automatica configurando il rule node \"copy to view\" nella tua rule chain e collegando i messaggi \"Post attributes\" e \"Attributes Updated\" al nuovo rule node.", + "timeseries-data": "Dati delle serie temporali", + "timeseries-data-hint": "Configura le chiavi delle serie temporali dell’entità di destinazione che saranno accessibili alla entity view. Questi dati delle serie temporali sono di sola lettura.", "search": "Cerca viste entità", "selected-entity-views": "{ count, plural, =1 {1 vista entità} other {# viste entità} } selezionate", "assign-entity-view-to-edge": "Assegna vista(e) entità all'Edge", @@ -2933,11 +3063,12 @@ "duplicate-filter": "Esiste già un filtro con lo stesso nome.", "filters": "Filtri", "unable-delete-filter-title": "Impossibile eliminare il filtro", - "unable-delete-filter-text": "Il filtro '{{filter}}' non può essere eliminato poiché è utilizzato dai seguenti widget:
{{widgetsList}}", - "duplicate-filter-error": "Filtro duplicato trovato '{{filter}}'.
I filtri devono essere univoci all'interno della dashboard.", - "missing-key-filters-error": "I filtri chiave sono mancanti per il filtro '{{filter}}'.", + "unable-delete-filter-text": "Il filtro '{{filter}}' non può essere eliminato perché è utilizzato dai seguenti widget:
{{widgetsList}}", + "duplicate-filter-error": "Trovato filtro duplicato '{{filter}}'.
I filtri devono essere unici all’interno della dashboard.", + "missing-key-filters-error": "Mancano i key filters per il filtro '{{filter}}'.", "filter": "Filtro", "editable": "Modificabile", + "editable-hint": "Consenti all’utente di modificare il valore del filtro nelle dashboard.", "no-filters-found": "Nessun filtro trovato.", "no-filter-text": "Nessun filtro specificato", "add-filter-prompt": "Aggiungi un filtro", @@ -2974,19 +3105,21 @@ "complex-filter": "Filtro complesso", "edit-complex-filter": "Modifica filtro complesso", "edit-filter-user-params": "Modifica parametri utente predicato filtro", - "filter-user-params": "Parametri utente predicato filtro", + "filter-user-params": "Parametri utente del predicato del filtro", "user-parameters": "Parametri utente", "display-label": "Etichetta da visualizzare", - "order-priority": "Priorità di ordinamento del campo", + "custom-label": "Etichetta personalizzata", + "custom-label-hint": "Abilita per impostare un’etichetta personalizzata per il filtro. Se disabilitato, l’etichetta verrà generata automaticamente.", + "order-priority": "Ordine di visualizzazione", "key-filter": "Filtro chiave", "key-filters": "Filtri chiave", "key-name": "Nome chiave", - "key-name-required": "Il nome chiave è obbligatorio.", + "key-name-required": "Il nome della chiave è obbligatorio.", "key-type": { "key-type": "Tipo di chiave", "attribute": "Attributo", - "timeseries": "Serie temporale", - "entity-field": "Campo entità", + "timeseries": "Serie temporali", + "entity-field": "Campo dell’entità", "constant": "Costante", "client-attribute": "Attributo client", "server-attribute": "Attributo server", @@ -3021,7 +3154,8 @@ "switch-to-dynamic-value": "Passa al valore dinamico", "switch-to-default-value": "Passa al valore predefinito", "inherit-owner": "Eredita dal proprietario", - "source-attribute-not-set": "Se l'attributo sorgente non è impostato" + "source-attribute-not-set": "Se l’attributo sorgente non è impostato", + "unit": "Unità" }, "fullscreen": { "expand": "Espandi a schermo intero", @@ -3404,12 +3538,13 @@ "temperature-step": "Incremento della temperatura", "heat-pump-color": "Colore della pompa di calore", "power-button-background": "Sfondo del pulsante di accensione", - "value-box-background": "Sfondo del riquadro del valore", - "value-units": "Unità di valore", + "value-box-background": "Sfondo della casella del valore", + "value-units": "Unità del valore", + "enable-units-scale": "Abilita le unità sulla scala", "filtration-mode": "Modalità di filtrazione", - "filtration-mode-hint": "Valore intero che indica la modalità di filtrazione attuale.", - "filtration-mode-update": "Stato aggiornamento modalità di filtrazione", - "filtration-mode-update-hint": "Azione eseguita quando l'utente clicca per cambiare la modalità di filtrazione attuale.", + "filtration-mode-hint": "Valore intero che indica la modalità di filtrazione corrente.", + "filtration-mode-update": "Aggiornamento della modalità di filtrazione", + "filtration-mode-update-hint": "Azione eseguita quando l’utente fa clic per modificare la modalità di filtrazione corrente.", "filter-mode": "Filtro", "waste-mode": "Scarico", "backwash-mode": "Controlavaggio", @@ -3719,18 +3854,20 @@ "invalid-version-pattern": "Formato versione non valido. Usa il formato: major.minor.patch (es. 1.0.0).", "mobile-center": "Centro mobile", "mobile-package": "Pacchetto applicazione", - "mobile-package-max-length": "Il pacchetto applicazione deve contenere meno di 256 caratteri", - "mobile-package-required": "Pacchetto applicazione richiesto.", - "mobile-package-pattern": "Formato pacchetto applicazione non valido", + "mobile-package-max-length": "Il pacchetto applicazione deve essere inferiore a 256 caratteri", + "mobile-package-required": "Il pacchetto applicazione è obbligatorio.", + "mobile-package-pattern": "Formato non valido per il pacchetto applicazione", + "mobile-package-title": "Titolo applicazione", + "mobile-package-title-max-length": "Il titolo dell’applicazione deve essere inferiore a 256 caratteri", "no-application": "Nessuna applicazione trovata", - "no-bundles": "Nessun pacchetto trovato", + "no-bundles": "Nessun bundle trovato", "platform-type": "Tipo di piattaforma", "search-application": "Cerca applicazioni", - "search-bundles": "Cerca pacchetti", + "search-bundles": "Cerca bundle", "set": "Imposta", - "sha256-certificate-fingerprints": "Impronta certificato SHA256", - "sha256-certificate-fingerprints-required": "Impronta certificato SHA256 richiesta", - "sha256-certificate-fingerprints-pattern": "Formato impronta SHA256 non valido", + "sha256-certificate-fingerprints": "Impronte del certificato SHA256", + "sha256-certificate-fingerprints-required": "Le impronte del certificato SHA256 sono obbligatorie", + "sha256-certificate-fingerprints-pattern": "Formato non valido per l’impronta del certificato SHA256", "show-hidden-pages": "Mostra pagine nascoste", "status": "Stato", "status-type": { @@ -3791,68 +3928,66 @@ "url": "URL", "invalid-url-format": "Formato URL non valido", "path": "Percorso", - "invalid-path-format": "Formato del percorso non valido", + "invalid-path-format": "Formato percorso non valido", "custom-page": "Pagina personalizzata", "edit-page": "Modifica pagina", "edit-custom-page": "Modifica pagina personalizzata", "delete-page": "Elimina pagina", "qr-code-widget": "Widget codice QR", "type-here": "Digita qui", - "configuration-dialog": "Finestra di configurazione", - "configuration-app": "App di configurazione", + "configuration-dialog": "Dialogo di configurazione", + "configuration-app": "Configurazione app", "configuration-step": { - "prepare-environment-title": "Prepara l'ambiente di sviluppo", - "prepare-environment-text": "L'app mobile Flutter ThingsBoard richiede Flutter SDK. Segui le istruzioni per configurare Flutter SDK.", - "get-source-code-title": "Ottieni il codice sorgente dell'app", - "get-source-code-text": "Puoi ottenere il codice sorgente dell'app mobile Flutter ThingsBoard clonandolo dal repository GitHub:", - "configure-api-title": "Configura endpoint API di ThingsBoard", - "configure-api-text": "Apri il progetto flutter_thingsboard_pe_app nel tuo editor/IDE. Modifica:", - "configure-api-hint": "Imposta il valore della costante thingsBoardApiEndpoint per corrispondere all'endpoint API della tua istanza ThingsBoard. Non utilizzare gli hostname 'localhost' o '127.0.0.1'.", - "run-app-title": "Esegui l'app", - "run-app-text": "Esegui l'app come descritto nel tuo IDE.\nSe usi il terminale, esegui il comando seguente:", - "more-information": "Informazioni dettagliate disponibili nella nostra documentazione introduttiva.", - "getting-started": "Guida introduttiva", - "configure-package-title": "Configura il pacchetto dell'applicazione", - "configure-package-text": "Puoi modificare manualmente il pacchetto dell'applicazione o usare uno strumento CLI di terze parti.", - "configure-package-text-install": "Per installare lo strumento CLI Rename, esegui il seguente comando:", - "configure-package-run-commands": "Esegui questi comandi nella directory root del tuo progetto:" + "prepare-environment-title": "Prepara l’ambiente di sviluppo", + "prepare-environment-text": "L’applicazione mobile Flutter ThingsBoard richiede il Flutter SDK. Segui le istruzioni per configurare il Flutter SDK.", + "get-source-code-title": "Ottieni il codice sorgente dell’app", + "get-source-code-text": "Puoi ottenere il codice sorgente dell’applicazione mobile Flutter ThingsBoard clonandolo dal repository GitHub:", + "configure-app-settings-title": "Configura le impostazioni dell’app", + "configure-app-settings-text": "Scarica il file di configurazione e posizionalo nella directory principale del progetto che hai clonato nel passaggio precedente.", + "download-file": "Scarica file", + "run-app-title": "Esegui l’app", + "run-app-text": "Esegui l’app come indicato nel tuo IDE.\nSe utilizzi il terminale, esegui l’app con il seguente comando:", + "more-information": "Puoi trovare informazioni dettagliate nella nostra documentazione Getting Started.", + "getting-started": "Getting Started" } }, "notification": { "action-button": "Pulsante di azione", "action-type": "Tipo di azione", "active": "Attivo", - "add-notification-recipients-group": "Aggiungi gruppo destinatari notifica", - "add-notification-template": "Aggiungi modello di notifica", + "add-notification-recipients-group": "Aggiungi gruppo di destinatari notifiche", + "add-notification-template": "Aggiungi template di notifica", "add-recipient": "Aggiungi destinatario", "add-recipients": "Aggiungi destinatari", "add-rule": "Aggiungi regola", "add-stage": "Aggiungi fase", - "add-template": "Aggiungi modello", + "add-template": "Aggiungi template", "after": "Dopo", "alarm-assignment-trigger-settings": "Impostazioni trigger assegnazione allarme", "alarm-comment-trigger-settings": "Impostazioni trigger commento allarme", "alarm-trigger-settings": "Impostazioni trigger allarme", "all": "Tutti", - "api-feature-hint": "Se il campo è vuoto, il trigger sarà applicato a tutte le funzionalità API", + "api-feature-hint": "Se il campo è vuoto, il trigger verrà applicato a tutte le funzionalità API", "api-usage-trigger-settings": "Impostazioni trigger utilizzo API", "new-platform-version-trigger-settings": "Impostazioni trigger nuova versione piattaforma", - "rate-limits-trigger-settings": "Impostazioni trigger superamento limiti", + "rate-limits-trigger-settings": "Impostazioni trigger superamento limiti di velocità", "task-processing-failure-trigger-settings": "Impostazioni trigger errore elaborazione attività", - "at-least-one-should-be-selected": "Almeno uno deve essere selezionato", - "basic-settings": "Impostazioni di base", - "button-text": "Testo pulsante", + "resources-shortage-trigger-settings": "Impostazioni trigger carenza di risorse", + "at-least-one-should-be-selected": "Deve essere selezionato almeno uno", + "basic-settings": "Impostazioni base", + "button-text": "Testo del pulsante", "button-text-required": "Il testo del pulsante è obbligatorio", - "button-text-max-length": "Il testo del pulsante deve essere lungo al massimo {{ length }} caratteri", + "button-text-max-length": "Il testo del pulsante deve essere minore o uguale a {{ length }} caratteri", "compose": "Componi", "conversation": "Conversazione", "conversation-required": "La conversazione è obbligatoria", - "copy-notification-template": "Copia modello di notifica", + "copy-notification-template": "Copia template di notifica", "copy-rule": "Copia regola", - "copy-template": "Copia modello", + "copy-template": "Copia template", "create-new": "Crea nuovo", "created": "Creato", "customize-messages": "Personalizza messaggi", + "cpu-threshold": "Soglia CPU", "delete-notification-text": "Attenzione, dopo la conferma la notifica non sarà più recuperabile.", "delete-notification-title": "Sei sicuro di voler eliminare la notifica?", "delete-notifications-text": "Attenzione, dopo la conferma le notifiche non saranno più recuperabili.", @@ -3889,36 +4024,37 @@ "mobile-app": "App mobile", "mobile-app-preview": "Anteprima notifica app mobile" }, - "delivery-method-not-configure-click": "Metodo di consegna non configurato. Clicca per configurarlo.", - "delivery-method-not-configure-contact": "Metodo di consegna non configurato. Contatta l'amministratore di sistema.", + "delivery-method-not-configure-click": "Il metodo di consegna non è configurato. Clicca per configurarlo.", + "delivery-method-not-configure-contact": "Il metodo di consegna non è configurato. Contatta l’amministratore di sistema.", "delivery-methods": "Metodi di consegna", "description": "Descrizione", "device-activity-trigger-settings": "Impostazioni trigger attività dispositivo", - "device-list-rule-hint": "Se il campo è vuoto, il trigger sarà applicato a tutti i dispositivi", - "device-profiles-list-rule-hint": "Se il campo è vuoto, il trigger sarà applicato a tutti i profili dispositivo", + "device-list-rule-hint": "Se il campo è vuoto, il trigger verrà applicato a tutti i dispositivi", + "device-profiles-list-rule-hint": "Se il campo è vuoto, il trigger verrà applicato a tutti i profili dispositivo", "disabled": "Disabilitato", - "edge-trigger-settings": "Impostazioni trigger edge", - "edge-list-rule-hint": "Se il campo è vuoto, il trigger sarà applicato a tutte le istanze edge", - "edit-notification-recipients-group": "Modifica gruppo destinatari notifica", - "edit-notification-template": "Modifica modello di notifica", + "edge-trigger-settings": "Impostazioni trigger Edge", + "edge-list-rule-hint": "Se il campo è vuoto, il trigger verrà applicato a tutte le istanze Edge", + "edit-notification-recipients-group": "Modifica gruppo destinatari notifiche", + "edit-notification-template": "Modifica template notifica", "edit-rule": "Modifica regola", - "edit-template": "Modifica modello", + "edit-template": "Modifica template", "enabled": "Abilitato", "entities-limit-trigger-settings": "Impostazioni trigger limite entità", - "entity-action-trigger-settings": "Impostazioni trigger azione entità", - "entity-type": "Tipo entità", + "entity-action-trigger-settings": "Impostazioni trigger azioni entità", + "entity-type": "Tipo di entità", "escalation-chain": "Catena di escalation", - "failed-send": "Errori di invio", + "failed-send": "Invii non riusciti", "fails": "{ count, plural, =1 {1 errore} other {# errori} }", "filter": "Filtro", "first-recipient": "Primo destinatario", "inactive": "Inattivo", "inbox": "Posta in arrivo", "notification-inbox": "Notifiche / Posta in arrivo", - "input-field-support-templatization": "Il campo di input supporta la templatizzazione.", - "input-fields-support-templatization": "I campi di input supportano la templatizzazione.", + "input-field-support-templatization": "Il campo di input supporta la templificazione.", + "input-fields-support-templatization": "I campi di input supportano la templificazione.", "link": "Link", "link-required": "Il link è obbligatorio", + "link-max-length": "Il link deve essere inferiore o uguale a {{ length }} caratteri", "link-type": { "dashboard": "Apri dashboard", "link": "Apri URL" @@ -3929,22 +4065,23 @@ "mark-as-read": "Segna come letta", "message": "Messaggio", "message-required": "Il messaggio è obbligatorio", - "message-max-length": "Il messaggio deve contenere al massimo {{ length }} caratteri", + "message-max-length": "Il messaggio deve essere inferiore o uguale a {{ length }} caratteri", "name": "Nome", "name-required": "Il nome è obbligatorio", "new-notification": "Nuova notifica", "no-inbox-notification": "Nessuna notifica trovata", "no-notification-request": "Nessuna richiesta di notifica", - "no-notification-templates": "Nessun modello di notifica trovato", - "no-notifications-yet": "Nessuna notifica al momento", - "no-recipients-notification": "Nessuna notifica di destinatari", + "no-notification-templates": "Nessun template di notifica trovato", + "no-notifications-yet": "Ancora nessuna notifica", + "no-recipients-notification": "Nessun destinatario della notifica", "no-recipients-matching": "Nessun destinatario corrispondente a '{{entity}}' trovato.", "no-recipients-text": "Nessun destinatario trovato", "no-rule": "Nessuna regola configurata", "no-rules-notification": "Nessuna regola di notifica", - "no-severity-found": "Nessuna gravità trovata", - "no-severity-matching": "'{{severity}}' non trovata.", + "no-severity-found": "Nessuna severità trovata", + "no-severity-matching": "'{{severity}}' non trovato.", "no-template-matching": "Nessuna risorsa corrispondente a '{{template}}' trovata.", + "create-new-template": "Creane uno nuovo!", "not-found-slack-recipient": "Destinatario Slack non trovato", "notification": "Notifica", "notification-center": "Centro notifiche", @@ -3961,15 +4098,16 @@ "unassigned": "Allarme non assegnato" }, "notify-on": "Notifica su", - "notify-on-comment-update": "Notifica su aggiornamento commento", - "notify-on-required": "Campo 'Notifica su' obbligatorio", - "notify-on-unassign": "Notifica su disassegnazione", - "notify-only-user-comments": "Notifica solo commenti utente", - "only-rule-chain-lifecycle-failures": "Solo fallimenti del ciclo di vita della rule chain", - "only-rule-node-lifecycle-failures": "Solo fallimenti del ciclo di vita del nodo", - "platform-users": "Utenti piattaforma", + "notify-on-comment-update": "Notifica sull’aggiornamento dei commenti", + "notify-on-required": "Il campo 'Notifica su' è obbligatorio", + "notify-on-unassign": "Notifica sulla rimozione dell’assegnazione", + "notify-only-user-comments": "Notifica solo i commenti degli utenti", + "only-rule-chain-lifecycle-failures": "Solo i fallimenti del ciclo di vita della rule chain", + "only-rule-node-lifecycle-failures": "Solo i fallimenti del ciclo di vita del rule node", + "platform-users": "Utenti della piattaforma", + "ram-threshold": "Soglia RAM", "rate-limits": "Limiti di velocità", - "rate-limits-hint": "Se il campo è vuoto, il trigger sarà applicato a tutti i limiti", + "rate-limits-hint": "Se il campo è vuoto, il trigger verrà applicato a tutti i limiti di velocità", "recipient": "Destinatario", "recipient-group": "Gruppo destinatari", "recipient-type": { @@ -4032,13 +4170,14 @@ }, "start-from-scratch": "Inizia da zero", "status": "Stato", - "stop-escalation-alarm-status-become": "Ferma l'escalation quando lo stato dell'allarme diventa:", + "stop-escalation-alarm-status-become": "Interrompi l’escalation quando lo stato dell’allarme diventa:", + "storage-threshold": "Soglia di archiviazione", "subject": "Oggetto", - "subject-required": "L'oggetto è obbligatorio", - "subject-max-length": "L'oggetto deve contenere al massimo {{ length }} caratteri", - "template": "Modello", - "template-name": "Nome modello", - "template-required": "Il modello è obbligatorio", + "subject-required": "L’oggetto è obbligatorio", + "subject-max-length": "L’oggetto deve essere inferiore o uguale a {{ length }} caratteri", + "template": "Template", + "template-name": "Nome template", + "template-required": "Il template è obbligatorio", "template-type": { "alarm": "Allarme", "alarm-assignment": "Assegnazione allarme", @@ -4048,13 +4187,14 @@ "entities-limit": "Limite entità", "entity-action": "Azione entità", "general": "Generale", - "rule-engine-lifecycle-event": "Evento ciclo di vita rule engine", - "rule-node": "Nodo regola", - "new-platform-version": "Nuova versione piattaforma", - "rate-limits": "Limiti superati", - "edge-communication-failure": "Errore comunicazione edge", - "edge-connection": "Connessione edge", - "task-processing-failure": "Errore elaborazione attività" + "rule-engine-lifecycle-event": "Evento ciclo di vita Rule Engine", + "rule-node": "Rule node", + "new-platform-version": "Nuova versione della piattaforma", + "rate-limits": "Superamento limiti di velocità", + "edge-communication-failure": "Errore di comunicazione Edge", + "edge-connection": "Connessione Edge", + "task-processing-failure": "Errore elaborazione attività", + "resources-shortage": "Carenza risorse" }, "templates": "Modelli", "notification-templates": "Notifiche / Modelli", @@ -4072,12 +4212,13 @@ "device-activity": "Attività dispositivo", "entities-limit": "Limite entità", "entity-action": "Azione entità", - "rule-engine-lifecycle-event": "Evento ciclo di vita rule engine", + "rule-engine-lifecycle-event": "Evento ciclo di vita Rule Engine", "new-platform-version": "Nuova versione della piattaforma", - "rate-limits": "Limiti superati", - "edge-connection": "Connessione edge", - "edge-communication-failure": "Errore comunicazione edge", + "rate-limits": "Superamento limiti di velocità", + "edge-connection": "Connessione Edge", + "edge-communication-failure": "Errore di comunicazione Edge", "task-processing-failure": "Errore elaborazione attività", + "resources-shortage": "Carenza risorse", "trigger": "Trigger", "trigger-required": "Il trigger è obbligatorio" }, @@ -4112,14 +4253,15 @@ "assign-firmware-required": "Il firmware assegnato è obbligatorio", "assign-software": "Software assegnato", "assign-software-required": "Il software assegnato è obbligatorio", - "auto-generate-checksum": "Genera automaticamente checksum", + "auto-generate-checksum": "Genera automaticamente il checksum", "checksum": "Checksum", "checksum-hint": "Se il checksum è vuoto, verrà generato automaticamente", "checksum-algorithm": "Algoritmo di checksum", - "checksum-copied-message": "Checksum del pacchetto copiato negli appunti", - "change-firmware": "La modifica del firmware può causare l'aggiornamento di { count, plural, =1 {1 dispositivo} other {# dispositivi} }.", - "change-software": "La modifica del software può causare l'aggiornamento di { count, plural, =1 {1 dispositivo} other {# dispositivi} }.", - "chose-compatible-device-profile": "Il pacchetto caricato sarà disponibile solo per dispositivi con il profilo selezionato.", + "checksum-copied-message": "Il checksum del pacchetto è stato copiato negli appunti", + "change-firmware": "La modifica del firmware può causare l’aggiornamento di { count, plural, =1 {1 dispositivo} other {# dispositivi} }.", + "change-software": "La modifica del software può causare l’aggiornamento di { count, plural, =1 {1 dispositivo} other {# dispositivi} }.", + "change-ota-setting-title": "Sei sicuro di voler modificare le impostazioni OTA?", + "chose-compatible-device-profile": "Il pacchetto caricato sarà disponibile solo per i dispositivi con il profilo selezionato.", "chose-firmware-distributed-device": "Scegli il firmware da distribuire ai dispositivi", "chose-software-distributed-device": "Scegli il software da distribuire ai dispositivi", "content-type": "Tipo di contenuto", @@ -4185,9 +4327,9 @@ "current-password": "Password attuale", "copy-jwt-token": "Copia token JWT", "jwt-token": "Token JWT", - "token-valid-till": "Token valido fino a", - "tokenCopiedSuccessMessage": "Token JWT copiato negli appunti", - "tokenCopiedWarnMessage": "Il token JWT è scaduto! Per favore, ricarica la pagina." + "token-valid-till": "Il token è valido fino a", + "tokenCopiedSuccessMessage": "Il token JWT è stato copiato negli appunti", + "tokenCopiedWarnMessage": "Il token JWT è scaduto! Aggiorna la pagina." }, "profiles": { "profiles": "Profili" @@ -4313,7 +4455,8 @@ "remove-filter": "Rimuovi filtro", "add-relation-filter": "Aggiungi filtro di relazione", "any-relation": "Qualsiasi relazione", - "relation-filters": "Filtri di relazione", + "relation-filters": "Filtri relazione", + "relation-filter": "Filtro relazione", "additional-info": "Informazioni aggiuntive (JSON)", "invalid-additional-info": "Impossibile analizzare il JSON delle informazioni aggiuntive.", "no-relations-text": "Nessuna relazione trovata", @@ -4354,15 +4497,21 @@ "jks": "JKS", "js-module": "Modulo JS", "lwm2m-model": "Modello LWM2M", - "pkcs-12": "PKCS #12" + "pkcs-12": "PKCS #12", + "general": "Generale" }, - "resource-sub-type": "Sottotipo", + "resource-sub-type": "Sotto-tipo", "sub-type": { - "image": "immagine", + "image": "Immagine", "scada-symbol": "Simbolo SCADA", "extension": "Estensione", "module": "Modulo" - } + }, + "resource-is-in-use": "La risorsa è utilizzata da altre entità", + "resources-are-in-use": "Le risorse sono utilizzate da altre entità", + "resource-is-in-use-text": "La risorsa '{{title}}' non è stata eliminata perché utilizzata dalle seguenti entità:", + "resources-are-in-use-text": "Non tutte le risorse sono state eliminate perché utilizzate da altre entità.
È possibile visualizzare le entità referenziate facendo clic sul pulsante Riferimenti nella riga corrispondente della risorsa.
Se desideri comunque eliminare queste risorse, selezionale nella tabella sottostante e fai clic sul pulsante Elimina selezionate.", + "delete-resource-in-use-text": "Se desideri comunque eliminare la risorsa, fai clic sul pulsante Elimina comunque." }, "javascript": { "add": "Aggiungi risorsa JavaScript", @@ -4620,9 +4769,9 @@ "update-attributes-only-on-value-change": "Salva attributi solo se il valore cambia", "update-attributes-only-on-value-change-hint": "Aggiorna gli attributi ad ogni messaggio, indipendentemente dal fatto che il valore sia cambiato. Aumenta l'uso delle API e riduce le prestazioni.", "update-attributes-only-on-value-change-hint-enabled": "Aggiorna gli attributi solo se il valore è cambiato. Se il valore non cambia, non verrà inviato alcun aggiornamento né notifica.", - "fetch-credentials-to-metadata": "Recupera credenziali nei metadati", - "notify-device-on-update-hint": "Se abilitato, forza la notifica al dispositivo dell’aggiornamento di attributi condivisi. Se disabilitato, il comportamento dipende dal parametro 'notifyDevice' nei metadati del messaggio.", - "notify-device-on-delete-hint": "Se abilitato, forza la notifica al dispositivo della rimozione di attributi condivisi. Se disabilitato, il comportamento dipende dal parametro 'notifyDevice' nei metadati.", + "fetch-credentials-to-metadata": "Recupera le credenziali nei metadata", + "notify-device-on-update-hint": "Se abilitato, forza la notifica al dispositivo riguardo l’aggiornamento degli attributi condivisi. Se disabilitato, il comportamento della notifica è controllato dal parametro 'notifyDevice' nei metadata del messaggio in ingresso. Per disattivare la notifica, i metadata del messaggio devono contenere il parametro 'notifyDevice' impostato su 'false'. Qualsiasi altro caso attiverà la notifica al dispositivo.", + "notify-device-on-delete-hint": "Se abilitato, forza la notifica al dispositivo riguardo la rimozione degli attributi condivisi. Se disabilitato, il comportamento della notifica è controllato dal parametro 'notifyDevice' nei metadata del messaggio in ingresso. Per attivare la notifica, i metadata del messaggio devono contenere il parametro 'notifyDevice' impostato su 'true'. In qualsiasi altro caso, la notifica non verrà inviata al dispositivo.", "latest-timeseries": "Chiavi serie temporali più recenti", "timeseries-keys": "Chiavi serie temporali", "timeseries-keys-required": "Deve essere selezionata almeno una chiave della serie temporale.", @@ -4702,13 +4851,13 @@ "fields-mapping-hint": "Se il campo messaggio è impostato su $entityId, l'id dell’origine sarà salvato nella colonna specificata.", "relations-query-config-direction-suffix": "originatore", "profile-name": "Nome profilo", - "fetch-circle-parameter-info-from-metadata-hint": "Il campo metadati '{{perimeterKeyName}}' deve essere definito con il formato: {\"latitude\":48.196, \"longitude\":24.6532, \"radius\":100.0, \"radiusUnit\":\"METER\"}", - "fetch-poligon-parameter-info-from-metadata-hint": "Il campo metadati '{{perimeterKeyName}}' deve essere definito con il formato: [[48.19736,24.65235],[48.19800,24.65060],...,[48.19849,24.65420]]", - "short-templatization-tooltip": "Usa $[messageKey] per estrarre valore dal messaggio e ${metadataKey} dai metadati.", - "fields-mapping-required": "Deve essere specificata almeno una mappatura di campo.", - "at-least-one-field-required": "Deve essere fornito almeno un valore per un campo di input.", - "originator-fields-sv-map-hint": "I campi chiave di destinazione supportano la templatizzazione. Usa $[messageKey] o ${metadataKey}.", - "sv-map-hint": "Solo i campi chiave di destinazione supportano la templatizzazione. Usa $[messageKey] o ${metadataKey}.", + "fetch-circle-parameter-info-from-metadata-hint": "Il campo metadata '{{perimeterKeyName}}' deve essere definito nel seguente formato: {\"latitude\":48.196, \"longitude\":24.6532, \"radius\":100.0, \"radiusUnit\":\"METER\"}", + "fetch-poligon-parameter-info-from-metadata-hint": "Il campo metadata '{{perimeterKeyName}}' deve essere definito nel seguente formato: [[48.19736,24.65235],[48.19800,24.65060],...,[48.19849,24.65420]]", + "short-templatization-tooltip": "Usa $[messageKey] per estrarre il valore dal messaggio e ${metadataKey} per estrarre il valore dai metadata.", + "fields-mapping-required": "È necessario specificare almeno una mappatura dei campi.", + "at-least-one-field-required": "Almeno un campo di input deve avere un valore.", + "originator-fields-sv-map-hint": "I campi della chiave di destinazione supportano la templificazione. Usa $[messageKey] per estrarre il valore dal messaggio e ${metadataKey} per estrarre il valore dai metadata.", + "sv-map-hint": "Solo i campi della chiave di destinazione supportano la templificazione. Usa $[messageKey] per estrarre il valore dal messaggio e ${metadataKey} per estrarre il valore dai metadata.", "source-field": "Campo sorgente", "source-field-required": "Campo sorgente richiesto.", "originator-source": "Origine dell’origine", @@ -4902,10 +5051,10 @@ "credentials-anonymous": "Anonimo", "credentials-basic": "Base", "credentials-pem": "PEM", - "credentials-pem-hint": "È richiesto almeno il file del certificato CA del server o una coppia di file certificato e chiave privata del client", - "credentials-sas": "Firma di accesso condivisa", - "sas-key": "Chiave SAS", - "sas-key-required": "Chiave SAS richiesta.", + "credentials-pem-hint": "È richiesto almeno il file del certificato Server CA oppure una coppia formata da certificato client e chiave privata client", + "credentials-sas": "Shared Access Signature", + "sas-key": "SAS Key", + "sas-key-required": "La SAS Key è obbligatoria.", "hostname": "Nome host", "hostname-required": "Nome host richiesto.", "azure-ca-cert": "File certificato CA", @@ -5012,8 +5161,8 @@ "longitude-field-name": "Nome campo longitudine", "latitude-field-name-required": "Nome campo latitudine richiesto.", "longitude-field-name-required": "Nome campo longitudine richiesto.", - "fetch-perimeter-info-from-metadata": "Recupera informazioni perimetro dai metadati", - "fetch-perimeter-info-from-metadata-tooltip": "Se il tipo di perimetro è 'Poligono', il valore del campo metadati '{{perimeterKeyName}}' sarà usato come definizione del perimetro senza ulteriori analisi. Se è 'Cerchio', il valore verrà analizzato per estrarre i campi 'latitude', 'longitude', 'radius', 'radiusUnit' per la definizione del cerchio.", + "fetch-perimeter-info-from-metadata": "Recupera le informazioni del perimetro dai metadata", + "fetch-perimeter-info-from-metadata-tooltip": "Se il tipo di perimetro è impostato su 'Polygon', il valore del campo metadata '{{perimeterKeyName}}' verrà utilizzato come definizione del perimetro senza ulteriori elaborazioni. Altrimenti, se il tipo di perimetro è impostato su 'Circle', il valore del campo metadata '{{perimeterKeyName}}' verrà analizzato per estrarre i campi 'latitude', 'longitude', 'radius', 'radiusUnit' utilizzati per definire il perimetro circolare.", "perimeter-key-name": "Nome chiave perimetro", "perimeter-key-name-hint": "Nome campo metadati contenente le informazioni sul perimetro.", "perimeter-key-name-required": "Nome chiave perimetro richiesto.", @@ -5063,7 +5212,7 @@ "persist-alarm-rules": "Memorizza stato delle regole allarme", "persist-alarm-rules-hint": "Se abilitato, il nodo regola salverà lo stato dell'elaborazione nel database.", "fetch-alarm-rules": "Recupera stato delle regole allarme", - "fetch-alarm-rules-hint": "Se abilitato, il nodo regola ripristinerà lo stato dell'elaborazione all'inizializzazione e garantirà che gli allarmi vengano generati anche dopo riavvii del server.", + "fetch-alarm-rules-hint": "Se abilitato, il rule node ripristinerà lo stato di elaborazione all’inizializzazione e garantirà che gli allarmi vengano generati anche dopo i riavvii del server. Altrimenti, lo stato verrà ripristinato quando arriverà il primo messaggio dal dispositivo.", "input-value-key": "Chiave valore di input", "input-value-key-required": "Chiave del valore di input richiesta.", "output-value-key": "Chiave del valore di output", @@ -5208,19 +5357,19 @@ "add-key": "Aggiungi chiave", "recipients": "Destinatari", "message-subject-and-content": "Oggetto e contenuto del messaggio", - "template-rules-hint": "Entrambi i campi supportano la templatizzazione. Usa $[messageKey] per estrarre dal messaggio e ${metadataKey} dai metadati.", - "originator-customer-desc": "Usa il cliente dell'origine come nuovo originatore.", - "originator-tenant-desc": "Usa il tenant attuale come nuovo originatore.", - "originator-related-entity-desc": "Usa un'entità correlata come nuovo originatore. Ricerca basata su tipo e direzione della relazione.", - "originator-alarm-originator-desc": "Usa l'origine dell'allarme come nuovo originatore. Solo se l'origine del messaggio è un'entità di allarme.", - "originator-entity-by-name-pattern-desc": "Usa l'entità recuperata dal DB come nuovo originatore. Ricerca basata su tipo e modello di nome.", - "email-from-template-hint": "Usa $[messageKey] per estrarre dal messaggio e ${metadataKey} dai metadati.", - "recipients-block-main-hint": "Lista di indirizzi separati da virgole. Tutti i campi supportano la templatizzazione.", - "forward-msg-default-rule-chain": "Inoltra messaggio alla regola predefinita dell'origine", - "forward-msg-default-rule-chain-tooltip": "Se abilitato, il messaggio sarà inoltrato alla regola predefinita dell'origine o a quella configurata.", - "exclude-zero-deltas": "Escludi delta zero dal messaggio in uscita", - "exclude-zero-deltas-hint": "Se abilitato, la chiave \"{{outputValueKey}}\" sarà aggiunta solo se il valore non è zero.", - "exclude-zero-deltas-time-difference-hint": "Se abilitato, le chiavi \"{{outputValueKey}}\" e \"{{periodValueKey}}\" saranno aggiunte solo se \"{{outputValueKey}}\" non è zero.", + "template-rules-hint": "Entrambi i campi di input supportano la templificazione. Usa $[messageKey] per estrarre il valore dal messaggio e ${metadataKey} per estrarre il valore dai metadata del messaggio.", + "originator-customer-desc": "Utilizza il customer dell’originatore del messaggio in ingresso come nuovo originatore.", + "originator-tenant-desc": "Utilizza il tenant corrente come nuovo originatore.", + "originator-related-entity-desc": "Utilizza l’entità correlata come nuovo originatore. La ricerca si basa sul tipo di relazione configurato e sulla direzione.", + "originator-alarm-originator-desc": "Utilizza l’originatore dell’allarme come nuovo originatore. Solo se l’originatore del messaggio in ingresso è un’entità allarme.", + "originator-entity-by-name-pattern-desc": "Utilizza l’entità recuperata dal DB come nuovo originatore. La ricerca si basa sul tipo di entità e sul pattern del nome specificato.", + "email-from-template-hint": "Usa $[messageKey] per estrarre il valore dal messaggio e ${metadataKey} per estrarre il valore dai metadata.", + "recipients-block-main-hint": "Elenco di indirizzi separati da virgola. Tutti i campi di input supportano la templificazione. Usa $[messageKey] per estrarre il valore dal messaggio e ${metadataKey} per estrarre il valore dai metadata.", + "forward-msg-default-rule-chain": "Inoltra il messaggio alla default rule chain dell’originatore", + "forward-msg-default-rule-chain-tooltip": "Se abilitato, il messaggio verrà inoltrato alla default rule chain dell’originatore o alla rule chain dalla configurazione, se l’originatore non ha una default rule chain definita nel profilo dell’entità.", + "exclude-zero-deltas": "Escludi delta pari a zero dal messaggio in uscita", + "exclude-zero-deltas-hint": "Se abilitato, la chiave di output \"{{outputValueKey}}\" verrà aggiunta al messaggio in uscita solo se il suo valore non è zero.", + "exclude-zero-deltas-time-difference-hint": "Se abilitato, le chiavi di output \"{{outputValueKey}}\" e \"{{periodValueKey}}\" verranno aggiunte al messaggio in uscita solo se il valore di \"{{outputValueKey}}\" non è zero.", "search-direction-from": "Dall'origine all'entità di destinazione", "search-direction-to": "Dall'entità di destinazione all'origine", "del-relation-direction-from": "Dall'origine", @@ -5230,29 +5379,29 @@ "function-name": "Nome funzione", "function-name-required": "Nome funzione richiesto.", "qualifier": "Qualificatore", - "qualifier-hint": "Se non specificato, verrà usato \"$LATEST\".", + "qualifier-hint": "Se il qualificatore non è specificato, verrà utilizzato il qualificatore predefinito \"$LATEST\".", "aws-credentials": "Credenziali AWS", - "connection-timeout": "Timeout connessione", - "connection-timeout-required": "Timeout connessione richiesto.", - "connection-timeout-min": "Timeout minimo connessione è 0.", - "connection-timeout-hint": "Tempo massimo in secondi per stabilire connessione. 0 significa infinito (sconsigliato).", - "request-timeout": "Timeout richiesta", - "request-timeout-required": "Timeout richiesta richiesto.", - "request-timeout-min": "Timeout minimo richiesta è 0", - "request-timeout-hint": "Tempo massimo in secondi per completare la richiesta. 0 significa infinito (sconsigliato).", + "connection-timeout": "Timeout di connessione", + "connection-timeout-required": "Il timeout di connessione è obbligatorio.", + "connection-timeout-min": "Il timeout di connessione minimo è 0.", + "connection-timeout-hint": "Tempo di attesa in secondi durante la fase iniziale di stabilimento della connessione prima di interrompere per timeout. Un valore pari a 0 indica infinito e non è raccomandato.", + "request-timeout": "Timeout della richiesta", + "request-timeout-required": "Il timeout della richiesta è obbligatorio.", + "request-timeout-min": "Il timeout minimo della richiesta è 0.", + "request-timeout-hint": "Tempo di attesa in secondi affinché la richiesta venga completata prima di interrompere per timeout. Un valore pari a 0 indica infinito e non è raccomandato.", "units": "Unità", - "tell-failure-aws-lambda": "Segnala errore se AWS Lambda solleva eccezione", - "tell-failure-aws-lambda-hint": "Il nodo forza un errore se l'esecuzione della funzione Lambda solleva un'eccezione.", + "tell-failure-aws-lambda": "Segnala errore se l’esecuzione della funzione AWS Lambda genera un’eccezione", + "tell-failure-aws-lambda-hint": "Il rule node forza un failure dell’elaborazione del messaggio se l’esecuzione della funzione AWS Lambda genera un’eccezione.", "basic-mode": "Base", "advanced-mode": "Avanzato", "save-time-series": { "processing-settings": "Impostazioni di elaborazione", - "processing-settings-hint": "Definisci come vengono elaborati i messaggi in arrivo. Le impostazioni di base consentono di selezionare strategie preconfigurate, mentre le impostazioni avanzate permettono di selezionare strategie individuali per ciascuna azione.", - "advanced-settings-hint": "Fai attenzione quando configuri le strategie di elaborazione. Alcune combinazioni possono portare a comportamenti imprevisti.", + "processing-settings-hint": "Definisci come vengono elaborati i messaggi in ingresso. Le impostazioni di elaborazione di base consentono di selezionare strategie preconfigurate, mentre le impostazioni avanzate permettono di selezionare strategie di elaborazione individuali per ciascuna azione.", + "advanced-settings-hint": "Prestare attenzione quando si configurano le strategie di elaborazione. Alcune combinazioni possono portare a comportamenti imprevisti.", "strategy": "Strategia", "deduplication-interval": "Intervallo di deduplicazione", - "deduplication-interval-required": "L'intervallo di deduplicazione è richiesto", - "deduplication-interval-min-max-range": "L'intervallo di deduplicazione deve essere almeno di 1 secondo e massimo di 1 giorno", + "deduplication-interval-required": "L’intervallo di deduplicazione è obbligatorio", + "deduplication-interval-min-max-range": "L’intervallo di deduplicazione deve essere almeno 1 secondo e al massimo 1 giorno", "strategy-type": { "every-message": "Su ogni messaggio", "skip": "Salta", @@ -5304,6 +5453,37 @@ "html-text-description": "Permette di usare tag HTML per formattazione, link e immagini nel corpo dell'email.", "dynamic-text-description": "Permette di usare testo semplice o HTML dinamicamente in base alla templatizzazione.", "after-template-evaluation-hint": "Dopo la valutazione del template il valore deve essere true per HTML e false per testo semplice." + }, + "ai": { + "ai-model": "Modello AI", + "model": "Modello", + "ai-model-hint": "Seleziona il modello AI preconfigurato per elaborare le richieste inviate da questo rule node, oppure utilizza \"Create new\" per configurarene uno nuovo.", + "prompt-settings": "Impostazioni prompt", + "prompt-settings-hint": "Il system prompt opzionale definisce il ruolo generale e i vincoli dell’AI, mentre lo user prompt definisce il compito specifico da eseguire. Entrambi i campi supportano la templificazione.", + "system-prompt": "System prompt", + "system-prompt-max-length": "Il system prompt deve contenere 500000 caratteri o meno.", + "system-prompt-blank": "Il system prompt non può essere vuoto.", + "user-prompt": "User prompt", + "user-prompt-required": "Lo user prompt è obbligatorio.", + "user-prompt-max-length": "Lo user prompt deve contenere 500000 caratteri o meno.", + "user-prompt-blank": "Lo user prompt non può essere vuoto.", + "response-format": "Formato risposta", + "response-text": "Testo", + "response-json": "JSON", + "response-json-schema": "JSON Schema", + "response-format-hint-TEXT": "Consente al modello di generare testo arbitrario, che può o meno essere un oggetto JSON valido. Se l’output non è un oggetto JSON valido, verrà automaticamente racchiuso all’interno di un oggetto JSON sotto la chiave \"response\".", + "response-format-hint-JSON": "Il modello deve generare una risposta che sia un JSON valido. Se l’output non è un oggetto JSON valido, verrà automaticamente racchiuso all’interno di un oggetto JSON sotto la chiave \"response\".", + "response-format-hint-JSON_SCHEMA": "Il modello deve generare un JSON che corrisponda alla struttura e ai tipi di dati definiti nello schema fornito. Se l’output non è un oggetto JSON valido, verrà automaticamente racchiuso all’interno di un oggetto JSON sotto la chiave \"response\".", + "response-json-schema-hint": "È possibile inserire qualsiasi JSON Schema valido, ma questo rule node supporta solo un sottoinsieme limitato delle sue caratteristiche. Consulta la documentazione del nodo per i dettagli.", + "response-json-schema-required": "JSON Schema è obbligatorio", + "advanced-settings": "Impostazioni avanzate", + "timeout": "Timeout", + "timeout-hint": "Tempo massimo di attesa per una risposta \ndal modello AI prima che la richiesta venga interrotta.", + "timeout-required": "Il timeout è obbligatorio", + "timeout-validation": "Deve essere compreso tra 1 secondo e 10 minuti.", + "force-acknowledgement": "Forza acknowledgement", + "force-acknowledgement-hint": "Se abilitato, il messaggio in ingresso viene confermato immediatamente. La risposta del modello viene quindi aggiunta in coda come nuovo messaggio separato.", + "ai-resources": "Risorse AI" } }, "timezone": { @@ -5528,17 +5708,17 @@ "maximum-rule-chains": "Numero massimo di rule chain", "maximum-rule-chains-required": "È richiesto il numero massimo di rule chain.", "maximum-rule-chains-range": "Il numero massimo di rule chain non può essere negativo", - "maximum-resources-sum-data-size": "Dimensione totale massima dei file risorsa (byte)", - "maximum-resources-sum-data-size-required": "La dimensione totale massima dei file risorsa è richiesta.", - "maximum-resources-sum-data-size-range": "La dimensione totale massima dei file risorsa non può essere negativa", - "maximum-resource-size": "Dimensione massima del singolo file risorsa (byte)", - "maximum-resource-size-required": "La dimensione massima del file risorsa è richiesta", + "maximum-resources-sum-data-size": "Dimensione totale massima dei file delle risorse (byte)", + "maximum-resources-sum-data-size-required": "La dimensione totale massima dei file delle risorse è obbligatoria.", + "maximum-resources-sum-data-size-range": "La dimensione totale massima dei file delle risorse non può essere negativa", + "maximum-resource-size": "Dimensione massima del file risorsa (byte)", + "maximum-resource-size-required": "La dimensione massima del file risorsa è obbligatoria", "maximum-resource-size-range": "La dimensione massima del file risorsa non può essere negativa", - "maximum-ota-packages-sum-data-size": "Dimensione totale massima dei file OTA (byte)", - "maximum-ota-package-sum-data-size-required": "La dimensione totale massima dei file OTA è richiesta.", - "maximum-ota-package-sum-data-size-range": "La dimensione totale massima dei file OTA non può essere negativa", - "maximum-debug-duration-min": "Durata massima di debug (min)", - "maximum-debug-duration-min-range": "La durata massima di debug non può essere negativa", + "maximum-ota-packages-sum-data-size": "Dimensione totale massima dei file dei pacchetti OTA (byte)", + "maximum-ota-package-sum-data-size-required": "La dimensione totale massima dei file dei pacchetti OTA è obbligatoria.", + "maximum-ota-package-sum-data-size-range": "La dimensione totale massima dei file dei pacchetti OTA non può essere negativa", + "maximum-debug-duration-min": "Durata massima del debug (min)", + "maximum-debug-duration-min-range": "La durata massima del debug non può essere negativa", "rest-requests-for-tenant": "Richieste REST per tenant", "transport-tenant-telemetry-msg-rate-limit": "Messaggi di telemetria del tenant (trasporto)", "transport-tenant-telemetry-data-points-rate-limit": "Punti dati di telemetria del tenant (trasporto)", @@ -5603,9 +5783,9 @@ "rule-engine-exceptions-ttl-days": "TTL delle eccezioni del Rule Engine (giorni)", "rule-engine-exceptions-ttl-days-required": "TTL delle eccezioni del Rule Engine richiesto", "rule-engine-exceptions-ttl-days-range": "Il TTL delle eccezioni del Rule Engine non può essere negativo", - "max-rule-node-executions-per-message": "Numero massimo di esecuzioni per nodo per messaggio", - "max-rule-node-executions-per-message-required": "È richiesto il numero massimo di esecuzioni per nodo per messaggio.", - "max-rule-node-executions-per-message-range": "Il numero massimo di esecuzioni per nodo per messaggio non può essere negativo", + "max-rule-node-executions-per-message": "Numero massimo di esecuzioni del Rule node per messaggio", + "max-rule-node-executions-per-message-required": "Il numero massimo di esecuzioni del Rule node per messaggio è obbligatorio.", + "max-rule-node-executions-per-message-range": "Il numero massimo di esecuzioni del Rule node per messaggio non può essere negativo", "max-emails": "Numero massimo di email inviate", "max-emails-required": "È richiesto il numero massimo di email inviate.", "max-emails-range": "Il numero massimo di email inviate non può essere negativo", @@ -5624,8 +5804,11 @@ "incorrect-pattern-for-rate-limits": "Il formato è coppie separate da virgole di capacità e periodo (in secondi) con i due punti, ad es. 100:1,2000:60", "too-small-value-zero": "Il valore deve essere maggiore di 0", "too-small-value-one": "Il valore deve essere maggiore di 1", - "queue-size-is-limited-by-system-configuration": "La dimensione della coda è anche limitata dalla configurazione di sistema.", - "cassandra-tenant-limits-configuration": "Query Cassandra per tenant", + "queue-size-is-limited-by-system-configuration": "La dimensione della coda è inoltre limitata dalla configurazione del sistema.", + "cassandra-write-tenant-core-limits-configuration": "Query di scrittura Cassandra per le API Rest", + "cassandra-read-tenant-core-limits-configuration": "Query di lettura Cassandra per API Rest e telemetria WS", + "cassandra-write-tenant-rule-engine-limits-configuration": "Query di scrittura Cassandra per la telemetria del Rule Engine", + "cassandra-read-tenant-rule-engine-limits-configuration": "Query di lettura Cassandra per la telemetria del Rule Engine", "ws-limit-max-sessions-per-tenant": "Numero massimo di sessioni per tenant", "ws-limit-max-sessions-per-customer": "Numero massimo di sessioni per cliente", "ws-limit-max-sessions-per-regular-user": "Numero massimo di sessioni per utente regolare", @@ -5638,6 +5821,7 @@ "ws-limit-updates-per-session": "Aggiornamenti WS per sessione", "rate-limits": { "add-limit": "Aggiungi limite", + "and-also-less-than": "e anche inferiore a", "advanced-settings": "Impostazioni avanzate", "edit-limit": "Modifica limite", "calculated-field-debug-event-rate-limit": "Eventi di debug del campo calcolato", @@ -5656,12 +5840,15 @@ "edit-transport-gateway-device-telemetry-data-points-title": "Modifica i limiti dei punti dati di telemetria dei dispositivi gateway", "edit-tenant-rest-limits-title": "Modifica i limiti delle richieste REST per il tenant", "edit-customer-rest-limits-title": "Modifica i limiti delle richieste REST per il cliente", - "edit-ws-limit-updates-per-session-title": "Modifica i limiti degli aggiornamenti WS per sessione", - "edit-cassandra-tenant-limits-configuration-title": "Modifica i limiti delle query Cassandra per tenant", - "edit-tenant-entity-export-rate-limit-title": "Modifica i limiti di creazione delle versioni delle entità", - "edit-tenant-entity-import-rate-limit-title": "Modifica i limiti di caricamento delle versioni delle entità", - "edit-tenant-notification-request-rate-limit-title": "Modifica i limiti delle richieste di notifica", - "edit-tenant-notification-requests-per-rule-rate-limit-title": "Modifica i limiti delle richieste di notifica per regola", + "edit-ws-limit-updates-per-session-title": "Modifica limiti di aggiornamenti WS per sessione", + "edit-cassandra-write-tenant-core-limits-configuration": "Modifica query di scrittura Cassandra per le API Rest", + "edit-cassandra-read-tenant-core-limits-configuration": "Modifica query di lettura Cassandra per API Rest e telemetria WS", + "edit-cassandra-write-tenant-rule-engine-limits-configuration": "Modifica query di scrittura Cassandra per la telemetria del Rule Engine", + "edit-cassandra-read-tenant-rule-engine-limits-configuration": "Modifica query di lettura Cassandra per la telemetria del Rule Engine", + "edit-tenant-entity-export-rate-limit-title": "Modifica limiti di creazione delle versioni entità", + "edit-tenant-entity-import-rate-limit-title": "Modifica limiti di caricamento delle versioni entità", + "edit-tenant-notification-request-rate-limit-title": "Modifica limiti delle richieste di notifica", + "edit-tenant-notification-requests-per-rule-rate-limit-title": "Modifica limiti delle richieste di notifica per regola di notifica", "edit-edge-events-rate-limit": "Modifica i limiti degli eventi edge", "edit-edge-events-per-edge-rate-limit": "Modifica i limiti degli eventi edge per edge", "edge-events-rate-limit": "Eventi edge", @@ -5673,13 +5860,14 @@ "messages-per": "messaggi per", "not-set": "Non impostato", "number-of-messages": "Numero di messaggi", - "number-of-messages-required": "È richiesto il numero di messaggi.", + "number-of-messages-required": "Il numero di messaggi è obbligatorio.", "number-of-messages-min": "Il valore minimo è 1.", "preview": "Anteprima", - "per-seconds": "Ogni secondi", - "per-seconds-required": "È richiesta la frequenza temporale.", + "per-seconds": "Per secondi", + "per-seconds-required": "Il tempo di rate è obbligatorio.", "per-seconds-min": "Il valore minimo è 1.", - "rate-limits": "Limiti di frequenza", + "per-seconds-duplicate": "Intervallo di tempo duplicato. Ogni intervallo deve essere unico.", + "rate-limits": "Limiti di velocità", "remove-limit": "Rimuovi limite", "transport-tenant-msg": "Messaggi di trasporto del tenant", "transport-tenant-telemetry-msg": "Messaggi di telemetria del tenant", @@ -5825,21 +6013,135 @@ "label": "Etichetta", "value": "Valore", "date": "Data", - "show-date-time-interval": "Mostra intervallo data e ora", - "show-date-time-interval-hint": "Mostra intervallo data e ora in base all'aggregazione dei dati.", + "show-date-time-interval": "Mostra intervallo data/ora", + "show-date-time-interval-hint": "Mostra l’intervallo data/ora in base all’aggregazione dei dati.", + "hide-zero-tooltip-values": "Nascondi i valori pari a zero", + "show-stack-total": "Mostra il valore totale in modalità stack", "background-color": "Colore di sfondo", "background-blur": "Sfocatura sfondo" }, "unit": { + "set-unit-conversion": "Imposta conversione unità", + "unit-settings": { + "unit-settings": "Impostazioni unità", + "source-unit": "Unità di origine", + "source-unit-hint": "Questa è l’unità del valore memorizzato. L’unità da cui stai convertendo. Inserisci il simbolo usato dai dati di origine (es. m, km, ft, in).", + "target-metric-unit": "Unità metrica di destinazione", + "target-metric-unit-hint": "Scegli in quale unità metrica (SI) convertire il valore di origine (es. cm, mm, km).", + "target-imperial-unit": "Unità imperiale di destinazione", + "target-imperial-unit-hint": "Scegli in quale unità imperiale convertire il valore di origine (es. in, ft, yd).", + "target-hybrid-unit": "Unità ibrida di destinazione", + "target-hybrid-unit-hint": "Scegli in quale unità ibrida convertire il valore di origine (es. cm, in, km). Le unità ibride combinano unità metriche o imperiali.", + "enable-unit-conversion": "Abilita conversione unità", + "enable-unit-conversion-hint": "Attiva per abilitare la conversione. Se disattivato, il valore di origine passerà invariato. Disabilitato se esiste una sola unità nel gruppo di misurazione corrispondente (es. Flusso luminoso, AQI)." + }, + "unit-system": "Sistema di unità", + "unit-system-type": { + "AUTO": "Auto", + "METRIC": "Metrico", + "IMPERIAL": "Imperiale", + "HYBRID": "Ibrido" + }, + "measures": { + "absorbed-dose-rate": "Tasso di dose assorbita", + "acceleration": "Accelerazione", + "acidity": "Acidità", + "air-quality-index": "Indice qualità dell’aria", + "amount-of-substance": "Quantità di sostanza", + "angle": "Angolo", + "angular-acceleration": "Accelerazione angolare", + "area": "Area", + "area-density": "Densità di area", + "capacitance": "Capacità", + "catalytic-activity": "Attività catalitica", + "catalytic-concentration": "Concentrazione catalitica", + "charge": "Carica", + "current-density": "Densità di corrente", + "data-transfer-rate": "Velocità di trasferimento dati", + "density": "Densità", + "digital": "Digitale", + "dimension-ratio": "Rapporto dimensionale", + "dynamic-viscosity": "Viscosità dinamica", + "earthquake-magnitude": "Magnitudo sismica", + "electric-charge-density": "Densità di carica elettrica", + "electric-current": "Corrente elettrica", + "electric-dipole-moment": "Momento di dipolo elettrico", + "electric-field-strength": "Intensità del campo elettrico", + "electric-flux": "Flusso elettrico", + "electric-permittivity": "Permittività elettrica", + "electric-polarizability": "Polarizzabilità elettrica", + "electrical-conductance": "Conduttanza elettrica", + "electrical-conductivity": "Conducibilità elettrica", + "energy": "Energia", + "energy-density": "Densità di energia", + "force": "Forza", + "frequency": "Frequenza", + "fuel-efficiency": "Efficienza del carburante", + "heat-capacity": "Capacità termica", + "illuminance": "Illuminamento", + "inductance": "Induttanza", + "kinematic-viscosity": "Viscosità cinematica", + "length": "Lunghezza", + "light-exposure": "Esposizione luminosa", + "linear-charge-density": "Densità di carica lineare", + "logarithmic-ratio": "Rapporto logaritmico", + "luminous-efficacy": "Efficacia luminosa", + "luminous-flux": "Flusso luminoso", + "luminous-intensity": "Intensità luminosa", + "magnetic-field-gradient": "Gradiente del campo magnetico", + "magnetic-flux": "Flusso magnetico", + "magnetic-flux-density": "Densità di flusso magnetico", + "magnetic-moment": "Momento magnetico", + "magnetic-permeability": "Permeabilità magnetica", + "mass": "Massa", + "mass-fraction": "Frazione massica", + "molar-concentration": "Concentrazione molare", + "molar-energy": "Energia molare", + "molar-heat-capacity": "Capacità termica molare", + "molar-mass": "Massa molare", + "number-concentration": "Concentrazione numerica", + "parts-per-million": "Parti per milione", + "power": "Potenza", + "power-density": "Densità di potenza", + "pressure": "Pressione", + "radiance": "Radianza", + "radiant-intensity": "Intensità radiante", + "radiation-dose": "Dose di radiazione", + "radioactive-decay": "Decadimento radioattivo", + "radioactivity": "Radioattività", + "radioactivity-concentration": "Concentrazione di radioattività", + "reciprocal-length": "Lunghezza reciproca", + "resistance": "Resistenza", + "reynolds-number": "Numero di Reynolds", + "signal-level": "Livello del segnale", + "solid-angle": "Angolo solido", + "specific-energy": "Energia specifica", + "specific-heat-capacity": "Capacità termica specifica", + "specific-humidity": "Umidità specifica", + "specific-volume": "Volume specifico", + "speed": "Velocità", + "surface-charge-density": "Densità di carica superficiale", + "surface-tension": "Tensione superficiale", + "temperature": "Temperatura", + "thermal-conductivity": "Conducibilità termica", + "time": "Tempo", + "torque": "Coppia", + "turbidity": "Torbidità", + "voltage": "Tensione", + "volume": "Volume", + "volume-flow": "Flusso volumetrico" + }, "millimeter": "Millimetro", "centimeter": "Centimetro", - "angstrom": "Ångström", + "decimeter": "Decimetro", + "angstrom": "Angstrom", "nanometer": "Nanometro", "micrometer": "Micrometro", "meter": "Metro", "kilometer": "Chilometro", "inch": "Pollice", "foot": "Piede", + "foot-us": "Piede (US survey)", "yard": "Iarda", "mile": "Miglio", "nautical-mile": "Miglio nautico", @@ -5885,7 +6187,8 @@ "cubic-inch": "Pollice cubo", "cubic-foot": "Piede cubo", "cubic-yard": "Iarda cubica", - "fluid-ounce": "Oncia liquida", + "fluid-ounce": "Oncia fluida", + "fluid-ounce-per-second": "Once fluide al secondo", "pint": "Pinta", "quart": "Quarto", "gallon": "Gallone", @@ -5903,10 +6206,14 @@ "percent": "Percentuale", "meter-per-second": "Metro al secondo", "kilometer-per-hour": "Chilometro all'ora", - "foot-per-second": "Piede al secondo", + "foot-per-second": "Piedi al secondo", + "foot-per-minute": "Piedi al minuto", "mile-per-hour": "Miglio all'ora", "knot": "Nodo", + "inch-per-second": "Pollici al secondo", + "inch-per-hour": "Pollici all’ora", "millimeters-per-minute": "Millimetri al minuto", + "meter-per-minute": "Metri al minuto", "kilometer-per-hour-squared": "Chilometro all'ora quadrato", "foot-per-second-squared": "Piede al secondo quadrato", "pascal": "Pascal", @@ -5923,6 +6230,7 @@ "newton-per-meter": "Newton per metro", "atmospheres": "Atmosfere", "pounds-per-square-inch": "Libbre per pollice quadrato", + "kilopound-per-square-inch": "Kilopound per pollice quadrato", "torr": "Torr", "inches-of-mercury": "Pollici di mercurio", "pascal-per-square-meter": "Pascal per metro quadrato", @@ -5940,18 +6248,24 @@ "megajoule": "Megajoule", "gigajoule": "Gigajoule", "watt-hour": "Wattora", + "watt-minute": "Wattminuto", "kilowatt-hour": "Kilowattora", + "milliwatt-hour": "Milliwattora", + "megawatt-hour": "Megawattora", + "gigawatt-hour": "Gigawattora", "electron-volts": "Elettronvolt", - "joules-per-coulomb": "Joule per Coulomb", - "british-thermal-unit": "Unità termica britannica", + "joules-per-coulomb": "Joule per coulomb", + "british-thermal-unit": "Unità termiche britanniche", + "thousand-british-thermal-unit": "Mille unità termiche britanniche", + "million-british-thermal-unit": "Milioni di unità termiche britanniche", "foot-pound": "Piede-libbra", "calorie": "Caloria", "small-calorie": "Piccola caloria", - "kilocalorie": "Chilocaloria", - "joule-per-kelvin": "Joule per Kelvin", - "joule-per-kilogram-kelvin": "Joule per chilogrammo-Kelvin", + "kilocalorie": "Kilocaloria", + "joule-per-kelvin": "Joule per kelvin", + "joule-per-kilogram-kelvin": "Joule per chilogrammo-kelvin", "joule-per-kilogram": "Joule per chilogrammo", - "watt-per-meter-kelvin": "Watt per metro-Kelvin", + "watt-per-meter-kelvin": "Watt per metro-kelvin", "joule-per-cubic-meter": "Joule per metro cubo", "therm": "Therm", "electric-dipole-moment": "Momento di dipolo elettrico", @@ -5974,10 +6288,20 @@ "watt-per-square-inch": "Watt per pollice quadrato", "kilowatt-per-square-inch": "Kilowatt per pollice quadrato", "horsepower": "Cavallo vapore", - "btu-per-hour": "Unità termiche britanniche/ora", + "btu-per-hour": "Unità termiche britanniche per ora", + "btu-per-second": "Unità termiche britanniche per secondo", + "btu-per-day": "Unità termiche britanniche per giorno", + "mbtu-per-hour": "Mille unità termiche britanniche per ora", + "mbtu-per-second": "Mille unità termiche britanniche per secondo", + "mbtu-per-day": "Mille unità termiche britanniche per giorno", + "mmbtu-per-hour": "Milioni di unità termiche britanniche per ora", + "mmbtu-per-second": "Milioni di unità termiche britanniche per secondo", + "mmbtu-per-day": "Milioni di unità termiche britanniche per giorno", + "foot-pound-per-second": "Piede-libbra per secondo", "coulomb": "Coulomb", "millicoulomb": "Millicoulomb", "microcoulomb": "Microcoulomb", + "nanocoulomb": "Nanocoulomb", "picocoulomb": "Picocoulomb", "coulomb-per-meter": "Coulomb per metro", "coulomb-per-cubic-meter": "Coulomb per metro cubo", @@ -5995,14 +6319,17 @@ "are": "Ara", "barn": "Barn", "circular-inch": "Pollice circolare", - "milliampere-hour": "Milliampere-ora", - "ampere-hours": "Ampere-ora", - "kiloampere-hours": "Chiloampere-ora", + "milliampere-hour": "Milliampereora", + "ampere-hours": "Ampereora", + "kiloampere-hours": "Kiloampereora", "nanoampere": "Nanoampere", "picoampere": "Picoampere", "microampere": "Microampere", "milliampere": "Milliampere", "ampere": "Ampere", + "kiloampere": "Kiloampere", + "megaampere": "Megaampere", + "gigaampere": "Gigaampere", "microampere-per-square-centimeter": "Microampere per centimetro quadrato", "ampere-per-square-meter": "Ampere per metro quadrato", "ampere-per-meter": "Ampere per metro", @@ -6011,25 +6338,31 @@ "ampere-meter-squared": "Ampere metro quadrato", "nanovolt": "Nanovolt", "picovolt": "Picovolt", + "millivolt": "Millivolt", + "microvolt": "Microvolt", "volt": "Volt", - "dbmV": "dBmV", - "dbm": "dBm", - "volt-meter": "Volt-metro", - "kilovolt-meter": "Kilovolt-metro", - "megavolt-meter": "Megavolt-metro", - "microvolt-meter": "Microvolt-metro", - "millivolt-meter": "Millivolt-metro", - "nanovolt-meter": "Nanovolt-metro", + "kilovolt": "Kilovolt", + "megavolt": "Megavolt", + "dbmV": "Decibel volt", + "dbm": "Decibel milliwatt", + "volt-meter": "Volt metro", + "kilovolt-meter": "Kilovolt metro", + "megavolt-meter": "Megavolt metro", + "microvolt-meter": "Microvolt metro", + "millivolt-meter": "Millivolt metro", + "nanovolt-meter": "Nanovolt metro", "ohm": "Ohm", "microohm": "Microohm", "milliohm": "Milliohm", "kilohm": "Kilohm", "megohm": "Megohm", "gigohm": "Gigohm", + "millihertz": "Millihertz", "hertz": "Hertz", "kilohertz": "Kilohertz", "megahertz": "Megahertz", "gigahertz": "Gigahertz", + "terahertz": "Terahertz", "rpm": "Giri al minuto", "candela-per-square-meter": "Candela per metro quadrato", "candela": "Candela", @@ -6037,21 +6370,21 @@ "lux": "Lux", "foot-candle": "Foot-candle", "lumen-per-square-meter": "Lumen per metro quadrato", - "lux-second": "Secondo lux", - "lumen-second": "Secondo lumen", + "lux-second": "Lux secondo", + "lumen-second": "Lumen secondo", "lumens-per-watt": "Lumen per watt", "mole": "Mole", "nanomole": "Nanomole", "micromole": "Micromole", "millimole": "Millimole", - "kilomole": "Chilomole", + "kilomole": "Kilomole", "mole-per-cubic-meter": "Mole per metro cubo", - "rssi": "RSSI", + "rssi": "Indicatore di intensità del segnale ricevuto", "ppm": "Parti per milione", "ppb": "Parti per miliardo", "micrograms-per-cubic-meter": "Microgrammi per metro cubo", - "aqi": "Indice di qualità dell'aria (AQI)", - "gram-per-cubic-meter": "Grammo per metro cubo", + "aqi": "AQI", + "gram-per-cubic-meter": "Grammi per metro cubo", "gram-per-kilogram": "Umidità specifica", "millimeters-per-second": "Millimetri al secondo", "neper": "Neper", @@ -6071,50 +6404,53 @@ "coulombs-per-kilogram": "Coulomb per chilogrammo", "becquerels-per-cubic-meter": "Becquerel per metro cubo", "curies-per-liter": "Curie per litro", - "becquerels-per-second": "Becquerel al secondo", - "curies-per-second": "Curie al secondo", - "gy-per-second": "Gray al secondo", + "becquerels-per-second": "Becquerel per secondo", + "curies-per-second": "Curie per secondo", + "gy-per-second": "Gray per secondo", "watt-per-steradian": "Watt per steradiante", "watt-per-square-metre-steradian": "Watt per metro quadrato-steradiante", - "ph-level": "Livello di pH", + "ph-level": "Livello pH", "turbidity": "Torbidità", "mg-per-liter": "Milligrammi per litro", "microsiemens-per-centimeter": "Microsiemens per centimetro", "millisiemens-per-meter": "Millisiemens per metro", "siemens-per-meter": "Siemens per metro", - "kilogram-per-cubic-meter": "Chilogrammo per metro cubo", - "gram-per-cubic-centimeter": "Grammo per centimetro cubo", - "kilogram-per-square-meter": "Chilogrammo per metro quadrato", - "milligram-per-milliliter": "Milligrammo per millilitro", - "milligram-per-cubic-meter": "Milligrammo per metro cubo", + "kilogram-per-cubic-meter": "Chilogrammi per metro cubo", + "gram-per-cubic-centimeter": "Grammi per centimetro cubo", + "kilogram-per-square-meter": "Chilogrammi per metro quadrato", + "milligram-per-milliliter": "Milligrammi per millilitro", + "milligram-per-cubic-meter": "Milligrammi per metro cubo", "pound-per-cubic-foot": "Libbra per piede cubo", "ounces-per-cubic-inch": "Once per pollice cubo", "tons-per-cubic-yard": "Tonnellate per iarda cubica", - "particle-density": "Densità di particelle", + "particle-density": "Densità delle particelle", "kilometers-per-liter": "Chilometri per litro", "miles-per-gallon": "Miglia per gallone", "liters-per-100-km": "Litri per 100 km", "gallons-per-mile": "Galloni per miglio", - "liters-per-hour": "Litri all'ora", - "gallons-per-hour": "Galloni all'ora", - "beats-per-minute": "Battiti per minuto", + "liters-per-hour": "Litri per ora", + "gallons-per-hour": "Galloni per ora", + "beats-per-minute": "Battiti al minuto", "millimeters-of-mercury": "Millimetri di mercurio", "milligrams-per-deciliter": "Milligrammi per decilitro", "g-force": "Forza G", - "kilonewton": "Chilonewton", + "kilonewton": "Kilonewton", "kilogram-force": "Chilogrammo-forza", "pound-force": "Libbra-forza", - "kilopound-force": "Chilolibbra-forza", + "kilopound-force": "Kilopound-forza", "dyne": "Dina", "poundal": "Poundal", "kip": "Kip", "gal": "Gal", "gravity": "Gravità", - "hectopascal": "Ettopascal", + "hectopascal": "Ectopascal", "atmosphere": "Atmosfera", "millibars": "Millibar", "inch-of-mercury": "Pollice di mercurio", "richter-scale": "Scala Richter", + "nanosecond": "Nanosecondo", + "microsecond": "Microsecondo", + "millisecond": "Millisecondo", "second": "Secondo", "minute": "Minuto", "hour": "Ora", @@ -6123,13 +6459,14 @@ "month": "Mese", "year": "Anno", "cubic-foot-per-minute": "Piede cubo al minuto", - "cubic-meters-per-hour": "Metri cubi all'ora", + "cubic-meters-per-hour": "Metri cubi all’ora", "cubic-meters-per-second": "Metri cubi al secondo", "liter-per-second": "Litri al secondo", "liter-per-minute": "Litri al minuto", "gallons-per-minute": "Galloni al minuto", "cubic-foot-per-second": "Piede cubo al secondo", "milliliters-per-minute": "Millilitri al minuto", + "cubic-decimeter-per-second": "Decimetri cubi al secondo", "bit": "Bit", "byte": "Byte", "kilobyte": "Kilobyte", @@ -6150,8 +6487,11 @@ "megabyte-per-second": "Megabyte al secondo", "gigabyte-per-second": "Gigabyte al secondo", "degree": "Grado", - "radian": "Radianti", - "gradian": "Gradi centesimali", + "radian": "Radiante", + "gradian": "Grado centesimale", + "arcminute": "Primo d’arco", + "arcsecond": "Secondo d’arco", + "milliradian": "Milliradiante", "revolution": "Rivoluzione", "siemens": "Siemens", "millisiemens": "Millisiemens", @@ -6177,16 +6517,16 @@ "nanotesla": "Nanotesla", "kilotesla": "Kilotesla", "megatesla": "Megatesla", - "millitesla-square-meters": "Millitesla per metro quadrato", + "millitesla-square-meters": "Millitesla metri quadrati", "gamma": "Gamma", "lambda": "Lambda", - "square-meter-per-second": "Metro quadrato al secondo", - "square-centimeter-per-second": "Centimetro quadrato al secondo", + "square-meter-per-second": "Metri quadrati al secondo", + "square-centimeter-per-second": "Centimetri quadrati al secondo", "stoke": "Stoke", - "centistokes": "Centistoke", - "square-foot-per-second": "Piede quadrato al secondo", - "square-inch-per-second": "Pollice quadrato al secondo", - "pascal-second": "Pascal per secondo", + "centistokes": "Centistokes", + "square-foot-per-second": "Piedi quadrati al secondo", + "square-inch-per-second": "Pollici quadrati al secondo", + "pascal-second": "Pascal secondo", "centipoise": "Centipoise", "poise": "Poise", "reynolds": "Reynolds", @@ -6194,37 +6534,39 @@ "newton-second-per-square-meter": "Newton secondo per metro quadrato", "dyne-second-per-square-centimeter": "Dina secondo per centimetro quadrato", "kilogram-per-meter-second": "Chilogrammo per metro-secondo", - "tesla-square-meters": "Tesla per metro quadrato", + "tesla-square-meters": "Tesla metri quadrati", "maxwell": "Maxwell", "tesla-per-meter": "Tesla per metro", "gauss-per-centimeter": "Gauss per centimetro", "weber": "Weber", "microweber": "Microweber", "milliweber": "Milliweber", - "gauss-square-centimeter": "Gauss per centimetro quadrato", - "kilogauss-square-centimeter": "Kilogauss per centimetro quadrato", + "gauss-square-centimeter": "Gauss centimetri quadrati", + "kilogauss-square-centimeter": "Kilogauss centimetri quadrati", "henry": "Henry", "millihenry": "Millihenry", "microhenry": "Microhenry", "nanohenry": "Nanohenry", "henry-per-meter": "Henry per metro", "tesla-meter-per-ampere": "Tesla metro per ampere", - "gauss-per-oersted": "Gauss per Oersted", + "gauss-per-oersted": "Gauss per oersted", "kilogram-per-mole": "Chilogrammo per mole", - "gram-per-mole": "Gramma per mole", + "gram-per-mole": "Grammo per mole", "milligram-per-mole": "Milligrammo per mole", "joule-per-mole": "Joule per mole", - "joule-per-mole-kelvin": "Joule per mole-Kelvin", + "joule-per-mole-kelvin": "Joule per mole-kelvin", "millivolts-per-meter": "Millivolt per metro", "volts-per-meter": "Volt per metro", "kilovolts-per-meter": "Kilovolt per metro", "radian-per-second": "Radianti al secondo", "radian-per-second-squared": "Radianti al secondo quadrato", "revolutions-per-minute-per-second": "Accelerazione angolare", - "deg-per-second": "gradi al secondo (°/s)", + "deg-per-second": "Gradi al secondo", + "rotation-per-minute": "Rotazioni al minuto", "degrees-brix": "Gradi Brix", "katal": "Katal", - "katal-per-cubic-metre": "Katal per metro cubo" + "katal-per-cubic-metre": "Katal per metro cubo", + "paris-inch": "Pollice di Parigi" }, "user": { "user": "Utente", @@ -6374,7 +6716,7 @@ "rollback-on-error-hint": "Se devi ripristinare un numero elevato di entità, valuta la possibilità di disabilitare questa opzione per migliorare le prestazioni.\nNota: in caso di errore durante il caricamento della versione, le entità già salvate (con relazioni, attributi, ecc.) rimarranno invariate." }, "widget": { - "widget-library": "Libreria widget", + "widget-library": "Libreria di widget", "widget-bundle": "Bundle di widget", "all-bundles": "Tutti i bundle", "select-widgets-bundle": "Seleziona bundle di widget", @@ -6383,19 +6725,19 @@ "widget": "Widget", "select-widget": "Seleziona widget", "no-widgets-matching": "Nessun widget corrispondente a '{{entity}}' trovato.", - "no-widgets": "Nessun widget", + "no-widgets": "Non ci sono ancora widget", "no-widgets-text": "Nessun widget trovato", "management": "Gestione widget", "editor": "Editor widget", - "confirm-to-exit-editor-html": "Hai modifiche non salvate al widget.
Sei sicuro di voler lasciare questa pagina?", - "widget-type-not-found": "Problema nel caricamento della configurazione del widget.
Probabilmente il tipo di widget associato è stato rimosso.", + "confirm-to-exit-editor-html": "Hai impostazioni del widget non salvate.
Sei sicuro di voler lasciare questa pagina?", + "widget-type-not-found": "Problema nel caricamento della configurazione del widget.
Probabilmente il tipo di\n widget associato è stato rimosso.", "widget-type-load-error": "Il widget non è stato caricato a causa dei seguenti errori:", "remove": "Rimuovi widget", "delete": "Elimina widget", "edit": "Modifica widget", "remove-widget-title": "Sei sicuro di voler rimuovere il widget '{{widgetTitle}}'?", - "remove-widget-text": "Dopo la conferma, il widget e tutti i dati correlati non saranno più recuperabili.", - "replace-reference-with-widget-copy": "Sostituisci riferimento con copia del widget", + "remove-widget-text": "Dopo la conferma, il widget e tutti i dati correlati diventeranno irrecuperabili.", + "replace-reference-with-widget-copy": "Sostituisci riferimento con una copia del widget", "timeseries": "Serie temporali", "search-data": "Cerca dati", "no-data-found": "Nessun dato trovato", @@ -7774,6 +8116,18 @@ "fill-area-opacity": "Opacità area riempita", "range-chart-style": "Stile grafico intervallo" }, + "knob": { + "behavior": "Comportamento", + "initial-value": "Valore iniziale", + "initial-value-hint": "Azione per ottenere il valore iniziale della manopola.", + "on-value-change": "Al cambio del valore", + "on-value-change-hint": "Azione attivata quando il valore della manopola viene modificato.", + "range": "Intervallo", + "min": "min", + "max": "max", + "value": "Valore", + "fallback-initial-value": "Valore iniziale di fallback" + }, "rpc": { "value-settings": "Impostazioni valore", "initial-value": "Valore iniziale", @@ -7830,9 +8184,7 @@ "led-status-value-timeseries": "Serie temporale dispositivo con valore stato LED", "check-status-method": "Metodo RPC per controllo stato dispositivo", "parse-led-status-value-function": "Funzione per analisi valore stato LED", - "knob-title": "Titolo manopola", - "min-value": "Valore minimo", - "max-value": "Valore massimo" + "knob-title": "Titolo manopola" }, "maps": { "map-type": { @@ -8327,14 +8679,14 @@ "markers-clustering-settings": "Impostazioni clustering marker", "use-map-markers-clustering": "Usa clustering marker mappa", "zoom-on-cluster-click": "Zoom al clic su un cluster", - "max-cluster-zoom": "Livello di zoom massimo per includere marker in un cluster (0 - 18)", + "max-cluster-zoom": "Il livello massimo di zoom in cui un marker può far parte di un cluster (0 - 18)", "max-cluster-radius-pixels": "Raggio massimo coperto da un cluster in pixel", - "cluster-zoom-animation": "Mostra animazione su marker durante zoom", - "show-markers-bounds-on-cluster-mouse-over": "Mostra limiti marker al passaggio su cluster", - "spiderfy-max-zoom-level": "Espandi cluster al massimo livello di zoom", - "load-optimization": "Ottimizzazione caricamento", - "cluster-chunked-loading": "Usa caricamento a blocchi per evitare blocchi della pagina", - "cluster-markers-lazy-load": "Usa caricamento ritardato per i marker", + "cluster-zoom-animation": "Mostra animazione sui marker durante lo zoom", + "show-markers-bounds-on-cluster-mouse-over": "Mostra i confini dei marker al passaggio del mouse su un cluster", + "spiderfy-max-zoom-level": "Attiva lo spiderfy al livello massimo di zoom (per vedere tutti i marker del cluster)", + "load-optimization": "Ottimizzazione del caricamento", + "cluster-chunked-loading": "Usa caricamento a blocchi per aggiungere i marker così da evitare blocchi della pagina", + "cluster-markers-lazy-load": "Usa il caricamento lazy per aggiungere i marker", "editor-settings": "Impostazioni editor", "enable-snapping": "Abilita allineamento ai vertici per disegno preciso", "init-draggable-mode": "Inizializza mappa in modalità trascinamento", @@ -8676,7 +9028,7 @@ "pie-chart-card-style": "Stile scheda grafico a torta" }, "radar-chart": { - "radar-appearance": "Aspetto radar", + "radar-appearance": "Aspetto del radar", "shape": "Forma", "shape-polygon": "Poligono", "shape-circle": "Cerchio", @@ -8687,7 +9039,11 @@ "radar-axis": "Asse radar", "axis-label": "Etichetta asse", "ticks-label": "Etichetta tacche", - "radar-chart-style": "Stile grafico radar" + "radar-chart-style": "Stile del grafico radar", + "max-axes-scaling": "Scala massima degli assi", + "max-axes-scaling-hint": "Scegli se ogni asse radar deve avere il proprio valore massimo (Separato) o condividere il valore massimo più alto tra tutti gli assi sulla base del dataset del widget (Comune).", + "separate": "Separato", + "common": "Comune" }, "time-series-chart": { "chart": "Grafico", @@ -8964,12 +9320,12 @@ "cpu": "CPU", "ram": "RAM", "disk": "Disco", - "cpu-warning-text": "Utilizzo elevato della CPU. Per evitare guasti, ottimizza le prestazioni del sistema.", - "cpu-critical-text": "Utilizzo critico della CPU. Per evitare guasti, ottimizza le prestazioni del sistema.", - "ram-warning-text": "Scarsa riserva di RAM. Per evitare guasti, ottimizza le prestazioni del sistema o aumenta la RAM.", - "ram-critical-text": "Riserva di RAM criticamente bassa. Per evitare guasti, ottimizza le prestazioni del sistema o aumenta la RAM.", - "disk-warning-text": "Spazio su disco insufficiente. Per evitare perdite di dati, libera o espandi lo spazio su disco.", - "disk-critical-text": "Spazio su disco criticamente insufficiente. Per evitare perdite di dati, libera o espandi lo spazio su disco." + "cpu-warning-text": "Utilizzo della CPU elevato. Per evitare malfunzionamenti del sistema, ottimizza le prestazioni.", + "cpu-critical-text": "Utilizzo della CPU criticamente elevato. Per evitare malfunzionamenti del sistema, ottimizza le prestazioni.", + "ram-warning-text": "Riserva di RAM in diminuzione. Per evitare malfunzionamenti del sistema, ottimizza le prestazioni o aumenta la quantità di RAM.", + "ram-critical-text": "Riserva di RAM criticamente bassa. Per evitare malfunzionamenti del sistema, ottimizza le prestazioni o aumenta la quantità di RAM.", + "disk-warning-text": "Spazio su disco in esaurimento. Per evitare la perdita di dati, libera o amplia lo spazio su disco.", + "disk-critical-text": "Spazio su disco criticamente basso. Per evitare la perdita di dati, libera o amplia lo spazio su disco." }, "cluster-info": { "service-id": "ID servizio", @@ -9193,4 +9549,4 @@ "language": { "language": "Lingua" } -} +} \ No newline at end of file diff --git a/ui-ngx/src/assets/locale/locale.constant-nl_NL.json b/ui-ngx/src/assets/locale/locale.constant-nl_NL.json index 379f36b9de..810f49ff00 100644 --- a/ui-ngx/src/assets/locale/locale.constant-nl_NL.json +++ b/ui-ngx/src/assets/locale/locale.constant-nl_NL.json @@ -128,26 +128,26 @@ "port-range": "Poort moet tussen 1 en 65535 liggen." }, "mail-from": "Afzenderadres", - "mail-from-required": "Afzenderadres is verplicht.", + "mail-from-required": "Afzenderadres is vereist.", "smtp-protocol": "SMTP-protocol", "smtp-host": "SMTP-host", - "smtp-host-required": "SMTP-host is verplicht.", + "smtp-host-required": "SMTP-host is vereist.", "smtp-port": "SMTP-poort", "smtp-port-required": "U moet een SMTP-poort opgeven.", - "smtp-port-invalid": "Dit lijkt geen geldige SMTP-poort.", + "smtp-port-invalid": "Dat lijkt geen geldige SMTP-poort te zijn.", "timeout-msec": "Timeout (msec)", - "timeout-required": "Timeout is verplicht.", - "timeout-invalid": "Dit lijkt geen geldige timeout.", + "timeout-required": "Timeout is vereist.", + "timeout-invalid": "Dat lijkt geen geldige timeout te zijn.", "enable-tls": "TLS inschakelen", "tls-version": "TLS-versie", "enable-proxy": "Proxy inschakelen", - "proxy-host": "Proxyhost", - "proxy-host-required": "Proxyhost is verplicht.", - "proxy-port": "Proxypoort", - "proxy-port-required": "Proxypoort is verplicht.", - "proxy-port-range": "Proxypoort moet tussen 1 en 65535 liggen.", - "proxy-user": "Proxygebruiker", - "proxy-password": "Proxywachtwoord", + "proxy-host": "Proxy-host", + "proxy-host-required": "Proxy-host is vereist.", + "proxy-port": "Proxy-poort", + "proxy-port-required": "Proxy-poort is vereist.", + "proxy-port-range": "Proxy-poort moet liggen tussen 1 en 65535.", + "proxy-user": "Proxy-gebruiker", + "proxy-password": "Proxy-wachtwoord", "change-password": "Wachtwoord wijzigen", "send-test-mail": "Testmail verzenden", "sms-provider": "SMS-provider", @@ -538,14 +538,20 @@ "info-message": "Wijziging van de JWT-ondertekeningssleutel maakt alle uitgegeven tokens ongeldig. Alle gebruikers moeten opnieuw inloggen. Dit heeft ook invloed op scripts die gebruikmaken van de REST API/Websockets." }, "resources": "Bronnen", - "notifications": "Meldingen", - "notifications-settings": "Meldingsinstellingen", + "notifications": "Notificaties", + "notifications-settings": "Notificatie-instellingen", "slack-api-token": "Slack API-token", "slack": "Slack", "slack-settings": "Slack-instellingen", "mobile-settings": "Mobiele instellingen", - "firebase-service-account-file": "Firebase serviceaccount referenties JSON-bestand", - "select-firebase-service-account-file": "Sleep uw Firebase serviceaccountbestand hierheen of " + "firebase-service-account-file": "Firebase serviceaccountreferenties JSON-bestand", + "select-firebase-service-account-file": "Sleep je Firebase serviceaccountreferentiesbestand hierheen of ", + "trendz": "Trendz", + "trendz-settings": "Trendz-instellingen", + "trendz-url": "Trendz-URL", + "trendz-url-required": "Trendz-URL is vereist", + "trendz-api-key": "Trendz API-sleutel", + "trendz-enable": "Trendz inschakelen" }, "alarm": { "alarm": "Alarm", @@ -612,43 +618,43 @@ "search": "Alarmen zoeken", "selected-alarms": "{ count, plural, =1 {1 alarm} other {# alarmen} } geselecteerd", "no-data": "Geen gegevens om weer te geven", - "polling-interval": "Polling-interval voor alarmen (sec)", - "polling-interval-required": "Polling-interval voor alarmen is verplicht.", - "min-polling-interval-message": "Minimaal toegestaan polling-interval is 1 seconde.", - "aknowledge-alarms-title": "{ count, plural, =1 {1 alarm bevestigen} other {# alarmen bevestigen} }", - "aknowledge-alarms-text": "Weet u zeker dat u { count, plural, =1 {1 alarm} other {# alarmen} } wilt bevestigen?", - "aknowledge-alarm-title": "Alarm bevestigen", - "aknowledge-alarm-text": "Weet u zeker dat u het alarm wilt bevestigen?", - "selected-alarms-are-acknowledged": "Geselecteerde alarmen zijn al bevestigd", - "clear-alarms-title": "{ count, plural, =1 {1 alarm zuiveren} other {# alarmen zuiveren} }", - "clear-alarms-text": "Weet u zeker dat u { count, plural, =1 {1 alarm} other {# alarmen} } wilt zuiveren?", - "clear-alarm-title": "Alarm zuiveren", - "clear-alarm-text": "Weet u zeker dat u het alarm wilt zuiveren?", - "delete-alarms-title": "{ count, plural, =1 {1 alarm verwijderen} other {# alarmen verwijderen} }", + "polling-interval": "Poll-interval voor alarmen (sec)", + "polling-interval-required": "Poll-interval voor alarmen is vereist.", + "min-polling-interval-message": "Minimaal 1 seconde poll-interval is toegestaan.", + "aknowledge-alarms-title": "Erken { count, plural, =1 {1 alarm} other {# alarmen} }", + "aknowledge-alarms-text": "Weet u zeker dat u { count, plural, =1 {1 alarm} other {# alarmen} } wilt erkennen?", + "aknowledge-alarm-title": "Alarm erkennen", + "aknowledge-alarm-text": "Weet u zeker dat u dit alarm wilt erkennen?", + "selected-alarms-are-acknowledged": "Geselecteerde alarmen zijn al erkend", + "clear-alarms-title": "Wis { count, plural, =1 {1 alarm} other {# alarmen} }", + "clear-alarms-text": "Weet u zeker dat u { count, plural, =1 {1 alarm} other {# alarmen} } wilt wissen?", + "clear-alarm-title": "Alarm wissen", + "clear-alarm-text": "Weet u zeker dat u dit alarm wilt wissen?", + "delete-alarms-title": "Verwijder { count, plural, =1 {1 alarm} other {# alarmen} }", "delete-alarms-text": "Weet u zeker dat u { count, plural, =1 {1 alarm} other {# alarmen} } wilt verwijderen?", - "selected-alarms-are-cleared": "Geselecteerde alarmen zijn al gezuiverd", + "selected-alarms-are-cleared": "Geselecteerde alarmen zijn al gewist", "alarm-status-filter": "Alarmstatusfilter", "alarm-filter-title": "Alarmfilter", "assigned": "Toegewezen", "filter-title": "Filter", "max-count-load": "Maximaal aantal te laden alarmen (0 - onbeperkt)", - "max-count-load-required": "Maximaal aantal te laden alarmen is verplicht.", + "max-count-load-required": "Maximaal aantal te laden alarmen is vereist.", "max-count-load-error-min": "Minimale waarde is 0.", - "fetch-size": "Fetch-grootte", - "fetch-size-required": "Fetch-grootte is verplicht.", + "fetch-size": "Ophaalgrootte", + "fetch-size-required": "Ophaalgrootte is vereist.", "fetch-size-error-min": "Minimale waarde is 10.", "alarm-types": "Alarmtypen", - "alarm-type-list": "Lijst van alarmtypen", + "alarm-type-list": "Lijst met alarmtypen", "any-type": "Elk type", "assigned-to-current-user": "Toegewezen aan huidige gebruiker", "assigned-to-me": "Toegewezen aan mij", - "search-propagated-alarms": "Gepropageerde alarmen zoeken", - "comments": "Alarmopmerkingen", - "show-more": "Meer weergeven", - "additional-info": "Aanvullende info", + "search-propagated-alarms": "Zoek verspreide alarmen", + "comments": "Alarmcommentaren", + "show-more": "Toon meer", + "additional-info": "Aanvullende informatie", "alarm-type": "Alarmtype", "enter-alarm-type": "Voer alarmtype in", - "no-alarm-types-matching": "Geen overeenkomende alarmtypen gevonden voor '{{entitySubtype}}'.", + "no-alarm-types-matching": "Geen alarmtypen gevonden die overeenkomen met '{{entitySubtype}}'.", "alarm-type-list-empty": "Geen alarmtypen geselecteerd." }, "alarm-activity": { @@ -671,14 +677,14 @@ "add": "Alias toevoegen", "edit": "Alias bewerken", "name": "Aliasnaam", - "name-required": "Aliasnaam is verplicht", + "name-required": "Aliasnaam is vereist", "duplicate-alias": "Er bestaat al een alias met dezelfde naam.", - "filter-type-single-entity": "Enkelvoudige entiteit", + "filter-type-single-entity": "Enkele entiteit", "filter-type-entity-list": "Entiteitenlijst", "filter-type-entity-name": "Entiteitsnaam", "filter-type-entity-type": "Entiteitstype", "filter-type-state-entity": "Entiteit uit dashboardstatus", - "filter-type-state-entity-description": "Entiteit afkomstig uit statusparameters van het dashboard", + "filter-type-state-entity-description": "Entiteit verkregen via parameters van dashboardstatus", "filter-type-asset-type": "Assettype", "filter-type-asset-type-description": "Assets van het type '{{assetTypes}}'", "filter-type-asset-type-and-name-description": "Assets van het type '{{assetTypes}}' met naam die begint met '{{prefix}}'", @@ -702,22 +708,23 @@ "filter-type-entity-view-search-query": "Entiteitsoverzicht zoekquery", "filter-type-entity-view-search-query-description": "Entiteitsoverzichten met typen {{entityViewTypes}} die een {{relationType}}-relatie {{direction}} {{rootEntity}} hebben", "filter-type-apiUsageState": "API-gebruiksstatus", - "entity-filter": "Entiteitenfilter", + "entity-filter": "Entiteitfilter", "resolve-multiple": "Oplossen als meerdere entiteiten", - "resolve-multiple-hint": "Inschakelen om gegevens van alle gefilterde entiteiten tegelijkertijd weer te geven.\nAls uitgeschakeld, toont de widget alleen gegevens van de geselecteerde entiteit.", + "resolve-multiple-hint": "Schakel in om gegevens van alle gefilterde entiteiten gelijktijdig weer te geven.\nIndien uitgeschakeld, toont de widget alleen gegevens van de geselecteerde entiteit.", "filter-type": "Filtertype", - "filter-type-required": "Filtertype is verplicht.", + "filter-type-required": "Filtertype is vereist.", "entity-filter-no-entity-matched": "Geen entiteiten gevonden die overeenkomen met het opgegeven filter.", - "no-entity-filter-specified": "Geen entiteitenfilter opgegeven", - "root-state-entity": "Gebruik dashboardstatus-entiteit als root", + "no-entity-filter-specified": "Geen entiteitfilter gespecificeerd", + "root-state-entity": "Gebruik dashboardstatusentiteit als root", "last-level-relation": "Alleen laatste relatieniveau ophalen", "root-entity": "Root-entiteit", - "state-entity-parameter-name": "Parameternaam status-entiteit", - "default-state-entity": "Standaard status-entiteit", + "state-entity-parameter-name": "Naam van statusentiteitsparameter", + "default-state-entity": "Standaardstatusentiteit", "default-entity-parameter-name": "Standaard", + "query-options": "Query-opties", "max-relation-level": "Maximaal relatieniveau", "unlimited-level": "Ongelimiteerd niveau", - "state-entity": "Dashboardstatus-entiteit", + "state-entity": "Dashboardstatusentiteit", "all-entities": "Alle entiteiten", "any-relation": "elke" }, @@ -771,12 +778,12 @@ "delete-asset-text": "Let op: na bevestiging worden de asset en alle gerelateerde gegevens onherstelbaar verwijderd.", "delete-assets-title": "Weet u zeker dat u { count, plural, =1 {1 asset} other {# assets} } wilt verwijderen?", "delete-assets-action-title": "{ count, plural, =1 {1 asset verwijderen} other {# assets verwijderen} }", - "delete-assets-text": "Let op: na bevestiging worden alle geselecteerde assets verwijderd en alle gerelateerde gegevens onherstelbaar.", + "delete-assets-text": "Wees voorzichtig, na bevestiging worden alle geselecteerde assets en alle gerelateerde gegevens onherstelbaar verwijderd.", "make-public-asset-title": "Weet u zeker dat u de asset '{{assetName}}' openbaar wilt maken?", "make-public-asset-text": "Na bevestiging wordt de asset en alle bijbehorende gegevens openbaar en toegankelijk voor anderen.", "make-private-asset-title": "Weet u zeker dat u de asset '{{assetName}}' privé wilt maken?", "make-private-asset-text": "Na bevestiging wordt de asset privé en niet meer toegankelijk voor anderen.", - "unassign-asset-title": "Weet u zeker dat u de asset '{{assetName}}' wilt onttrekken?", + "unassign-asset-title": "Weet u zeker dat u de asset '{{assetName}}' wilt ontkoppelen?", "unassign-asset-text": "Na bevestiging wordt de asset ontkoppeld en is deze niet meer toegankelijk voor de klant.", "unassign-asset": "Asset ontkoppelen", "unassign-assets-title": "Weet u zeker dat u { count, plural, =1 {1 asset} other {# assets} } wilt onttrekken?", @@ -801,7 +808,7 @@ "selected-assets": "{ count, plural, =1 {1 asset} other {# assets} } geselecteerd" }, "attribute": { - "attributes": "Attribuuten", + "attributes": "Attributen", "latest-telemetry": "Laatste telemetrie", "no-latest-telemetry": "Geen laatste telemetrie", "attributes-scope": "Bereik van entiteitsattributen", @@ -823,7 +830,7 @@ "value": "Waarde", "value-required": "Attribuutwaarde is verplicht.", "telemetry-key-required": "Telemetriesleutel is verplicht", - "telemetry-value-required": "Telemetrie waarde is verplicht", + "telemetry-value-required": "Telemetriewaarde is verplicht", "delete-attributes-title": "Weet u zeker dat u { count, plural, =1 {1 attribuut} other {# attributen} } wilt verwijderen?", "delete-attributes-text": "Let op: na bevestiging worden alle geselecteerde attributen verwijderd.", "delete-attributes": "Attributen verwijderen", @@ -854,10 +861,10 @@ } }, "api-usage": { - "api-features": "API-functies", + "api-features": "API-functionaliteiten", "api-usage": "API-gebruik", "alarm": "Alarm", - "alarms-created": "Gegenereerde alarmen", + "alarms-created": "Aangemaakte alarmen", "queue-stats": "Wachtrijstatistieken", "processing-failures-and-timeouts": "Verwerkingsfouten en time-outs", "exceptions": "Uitzonderingen", @@ -913,15 +920,20 @@ "transport-hourly-activity": "Uurlijkse activiteit transport", "transport-messages": "Transportberichten", "transport-monthly-activity": "Maandelijkse activiteit transport", - "view-details": "Bekijk details", - "view-statistics": "Bekijk statistieken" + "view-details": "Details bekijken", + "view-statistics": "Statistieken bekijken" }, "api-limit": { - "cassandra-queries": "Cassandra-query's", - "entity-version-creation": "Versiecreatie van entiteit", - "entity-version-load": "Versieladen van entiteit", - "notification-requests": "Meldingsverzoeken", - "notification-requests-per-rule": "Meldingsverzoeken per regel", + "cassandra-write-queries-core": "Rest API Cassandra schrijfbewerkingen", + "cassandra-read-queries-core": "Rest API en WS-telemetrie Cassandra leesbewerkingen", + "cassandra-write-queries-rule-engine": "Rule Engine telemetrie Cassandra schrijfbewerkingen", + "cassandra-read-queries-rule-engine": "Rule Engine telemetrie Cassandra leesbewerkingen", + "cassandra-write-queries-monolith": "Monolithische telemetrie Cassandra schrijfbewerkingen", + "cassandra-read-queries-monolith": "Monolithische telemetrie Cassandra leesbewerkingen", + "entity-version-creation": "Aanmaak van entiteitsversie", + "entity-version-load": "Laden van entiteitsversie", + "notification-requests": "Notificatieverzoeken", + "notification-requests-per-rule": "Notificatieverzoeken per regel", "rest-api-requests": "REST API-verzoeken", "rest-api-requests-per-customer": "REST API-verzoeken per klant", "transport-messages": "Transportberichten", @@ -931,8 +943,8 @@ "ws-updates-per-session": "WS-updates per sessie", "edge-events": "Edge-gebeurtenissen", "edge-events-per-edge": "Edge-gebeurtenissen per edge", - "edge-uplink-messages": "Edge uplink-berichten", - "edge-uplink-messages-per-edge": "Edge uplink-berichten per edge" + "edge-uplink-messages": "Edge-uplinkberichten", + "edge-uplink-messages-per-edge": "Edge-uplinkberichten per edge" }, "audit-log": { "audit": "Audit", @@ -1057,24 +1069,122 @@ "delete-multiple-title": "Weet u zeker dat u { count, plural, =1 {1 berekend veld} other {# berekende velden} } wilt verwijderen?", "delete-multiple-text": "Let op: na bevestiging worden alle geselecteerde berekende velden verwijderd en zijn de gegevens onherstelbaar.", "test-with-this-message": "Test met dit bericht", + "use-latest-timestamp": "Gebruik laatste tijdstempel", "hint": { - "arguments-simple-with-rolling": "Berekend veld van het type eenvoudig mag geen sleutels met tijdreeks rolling bevatten.", + "arguments-simple-with-rolling": "Berekende velden van het type 'eenvoudig' mogen geen sleutels bevatten met een rollende tijdreeks.", "arguments-empty": "Argumenten mogen niet leeg zijn.", - "expression-required": "Expressie is verplicht.", + "expression-required": "Expressie is vereist.", "expression-invalid": "Expressie is ongeldig", - "expression-max-length": "Lengte van de expressie moet minder dan 255 tekens zijn.", - "argument-name-required": "Argumentnaam is verplicht.", - "argument-name-pattern": "Ongeldige argumentnaam.", - "argument-name-duplicate": "Er bestaat al een argument met deze naam.", - "argument-name-max-length": "Argumentnaam moet minder dan 256 tekens zijn.", - "argument-name-forbidden": "Argumentnaam is gereserveerd en mag niet worden gebruikt.", - "argument-type-required": "Argumenttype is verplicht.", + "expression-max-length": "De lengte van de expressie moet minder dan 255 tekens zijn.", + "argument-name-required": "Argumentnaam is vereist.", + "argument-name-pattern": "Argumentnaam is ongeldig.", + "argument-name-duplicate": "Een argument met deze naam bestaat al.", + "argument-name-max-length": "Argumentnaam mag niet langer zijn dan 256 tekens.", + "argument-name-forbidden": "Deze argumentnaam is gereserveerd en mag niet worden gebruikt.", + "argument-type-required": "Argumenttype is vereist.", "max-args": "Maximum aantal argumenten bereikt.", - "decimals-range": "Standaard aantal decimalen moet tussen 0 en 15 liggen.", - "expression": "Standaardexpressie toont hoe je temperatuur converteert van Fahrenheit naar Celsius.", - "arguments-entity-not-found": "Doelentiteit van argument niet gevonden." + "decimals-range": "Het aantal decimalen moet een getal zijn tussen 0 en 15.", + "expression": "Standaardexpressie toont hoe temperatuur van Fahrenheit naar Celsius wordt omgerekend.", + "arguments-entity-not-found": "Doelentiteit van het argument niet gevonden.", + "use-latest-timestamp": "Indien ingeschakeld, wordt de berekende waarde opgeslagen met de meest recente tijdstempel van de telemetrie van de argumenten, in plaats van met de servertijd." } }, + "ai-models": { + "ai-models": "AI-modellen", + "ai-model": "AI-model", + "model": "Model", + "name": "Naam", + "ai-provider": "AI-provider", + "no-found": "Geen AI-modellen gevonden", + "list": "{ count, plural, =1 {Eén model} other {Lijst van # modellen} }", + "selected-fields": "{ count, plural, =1 {1 model} other {# modellen} } geselecteerd", + "add": "Model toevoegen", + "delete-model-title": "Weet u zeker dat u het model '{{modelName}}' wilt verwijderen?", + "delete-model-text": "Wees voorzichtig, na bevestiging wordt het model en alle gerelateerde gegevens permanent verwijderd.", + "delete-models-title": "Weet u zeker dat u { count, plural, =1 {1 model} other {# modellen} } wilt verwijderen?", + "delete-models-text": "Wees voorzichtig, na bevestiging worden alle geselecteerde modellen verwijderd en alle gerelateerde gegevens permanent gewist.", + "ai-providers": { + "openai": "OpenAI", + "azure-openai": "Azure OpenAI", + "google-ai-gemini": "Google AI Gemini", + "google-vertex-ai-gemini": "Google Vertex AI Gemini", + "mistral-ai": "Mistral AI", + "anthropic": "Anthropic", + "amazon-bedrock": "Amazon Bedrock", + "github-models": "GitHub-modellen", + "ollama": "Ollama" + }, + "name-required": "Naam is vereist.", + "name-max-length": "Naam mag maximaal 255 tekens bevatten.", + "provider": "Provider", + "api-key": "API-sleutel", + "api-key-required": "API-sleutel is vereist.", + "api-key-open-ai-required": "API-sleutel is vereist bij gebruik van de officiële OpenAI API.", + "project-id": "Project-ID", + "project-id-required": "Project-ID is vereist.", + "location": "Locatie", + "location-required": "Locatie is vereist.", + "service-account-key-file": "Serviceaccount sleutelbestand", + "service-account-key-file-required": "Serviceaccount sleutelbestand is vereist.", + "no-file": "Geen bestand geselecteerd.", + "drop-file": "Sleep een bestand hierheen of klik om een bestand te selecteren en te uploaden.", + "personal-access-token": "Persoonlijke toegangstoken", + "personal-access-token-required": "Persoonlijke toegangstoken is vereist.", + "configuration": "Configuratie", + "model-id": "Model-ID", + "model-id-required": "Model-ID is vereist.", + "deployment-name": "Naam van implementatie", + "deployment-name-required": "Naam van implementatie is vereist.", + "set": "Instellen", + "region": "Regio", + "region-required": "Regio is vereist.", + "access-key-id": "Access key ID", + "access-key-id-required": "Access key ID is vereist.", + "secret-access-key": "Geheime access key", + "secret-access-key-required": "Geheime access key is vereist.", + "temperature": "Temperature", + "temperature-hint": "Bepaalt het niveau van willekeur in de modeloutput. Hogere waarden verhogen de willekeur, lagere waarden verlagen deze.", + "temperature-min": "Moet 0 of hoger zijn.", + "top-p": "Top P", + "top-p-hint": "Stelt een groep samen van de meest waarschijnlijke tokens waaruit het model kan kiezen. Hogere waarden vergroten de diversiteit, lagere verkleinen deze.", + "top-p-min-max": "Moet groter zijn dan 0 en maximaal 1.", + "top-k": "Top K", + "top-k-hint": "Beperkt de keuzes van het model tot de vaste set van de \"K\" meest waarschijnlijke tokens.", + "top-k-min": "Moet 0 of hoger zijn.", + "presence-penalty": "Aanwezigheidsstraf", + "presence-penalty-hint": "Past een vaste straf toe op de waarschijnlijkheid van een token als het al eerder in de tekst is verschenen.", + "frequency-penalty": "Frequentiestraf", + "frequency-penalty-hint": "Verlaagt de waarschijnlijkheid van een token op basis van hoe vaak het voorkomt in de tekst.", + "max-output-tokens": "Maximaal aantal outputtokens", + "max-output-tokens-hint": "Stelt het maximumaantal tokens in dat het \nmodel kan genereren in één enkele respons.", + "context-length": "Contextlengte", + "context-length-hint": "Bepaalt de grootte van het contextvenster in tokens. Deze waarde stelt de totale geheugenlimiet van het model vast, inclusief zowel de invoer van de gebruiker als de gegenereerde output.", + "endpoint": "Endpoint", + "endpoint-required": "Endpoint is vereist.", + "baseurl": "Basis-URL", + "baseurl-required": "Basis-URL is vereist.", + "service-version": "Serviceversie", + "check-connectivity": "Verbinding controleren", + "check-connectivity-success": "Testverzoek was succesvol", + "check-connectivity-failed": "Testverzoek mislukt", + "no-model-matching": "Geen modellen gevonden die overeenkomen met '{{entity}}'.", + "model-required": "Model is vereist.", + "no-model-text": "Geen modellen gevonden.", + "authentication": "Authenticatie", + "authentication-basic-hint": "Gebruikt standaard HTTP Basic-authenticatie. De gebruikersnaam en het wachtwoord worden gecombineerd, Base64-gecodeerd en verzonden in een \"Authorization\"-header bij elk verzoek aan de Ollama-server.", + "authentication-token-hint": "Gebruikt Bearer-tokenauthenticatie. Het opgegeven token wordt rechtstreeks verzonden in een \"Authorization\"-header bij elk verzoek aan de Ollama-server.", + "authentication-type": { + "none": "Geen", + "basic": "Basic", + "token": "Token" + }, + "username": "Gebruikersnaam", + "username-required": "Gebruikersnaam is vereist.", + "password": "Wachtwoord", + "password-required": "Wachtwoord is vereist.", + "token": "Token", + "token-required": "Token is vereist." + }, "confirm-on-exit": { "message": "U heeft niet-opgeslagen wijzigingen. Weet u zeker dat u deze pagina wilt verlaten?", "html-message": "U heeft niet-opgeslagen wijzigingen.
Weet u zeker dat u deze pagina wilt verlaten?", @@ -1337,16 +1447,16 @@ "max-vertical-margin-message": "Maximale verticale marge is 50.", "apply-outer-margin": "Marge toepassen aan zijkanten van de lay-out", "autofill-height": "Automatisch lay-outhoogte vullen", - "mobile-layout": "Mobiele lay-outinstellingen", + "mobile-layout": "Instellingen voor mobiel dashboard", "mobile-row-height": "Mobiele rijhoogte", - "mobile-row-height-required": "Mobiele rijhoogte is verplicht.", - "min-mobile-row-height-message": "Minimale mobiele rijhoogte is 5 pixels.", - "max-mobile-row-height-message": "Maximale mobiele rijhoogte is 200 pixels.", + "mobile-row-height-required": "Waarde voor mobiele rijhoogte is vereist.", + "min-mobile-row-height-message": "Minimale toegestane waarde voor mobiele rijhoogte is 5 pixels.", + "max-mobile-row-height-message": "Maximale toegestane waarde voor mobiele rijhoogte is 200 pixels.", "row-height": "Rijhoogte", - "row-height-required": "Rijhoogte is verplicht.", - "min-row-height-message": "Minimale rijhoogte is 5 pixels.", - "max-row-height-message": "Maximale rijhoogte is 200 pixels.", - "display-first-in-mobile-view": "Eerst tonen in mobiele weergave", + "row-height-required": "Waarde voor rijhoogte is vereist.", + "min-row-height-message": "Minimale toegestane waarde voor rijhoogte is 5 pixels.", + "max-row-height-message": "Maximale toegestane waarde voor rijhoogte is 200 pixels.", + "display-first-in-mobile-view": "Als eerste weergeven in mobiele weergave", "title-settings": "Titelinstellingen", "display-title": "Dashboardtitel weergeven", "title-color": "Titelkleur", @@ -1487,20 +1597,20 @@ "time-prev-description": "tijdstempel van vorige waarde;", "prev-orig-value-description": "oorspronkelijke vorige waarde;", "aggregation": "Aggregatie", - "aggregation-type-hint-common": "Om prestatie redenen, is aggregatie alleen beschikbaar voor vaste tijdsintervallen zoals \"huidige dag\", \"huidige maand\", enz., niet voor schuivende vensters zoals 'laatste 30 minuten'.", - "aggregation-type-none-hint": "Gebruik laatste waarde.", - "aggregation-type-min-hint": "Zoek minimale waarde binnen geselecteerd tijdvenster.", - "aggregation-type-max-hint": "Zoek maximale waarde binnen geselecteerd tijdvenster.", - "aggregation-type-avg-hint": "Bereken gemiddelde waarde binnen geselecteerd tijdvenster.", - "aggregation-type-sum-hint": "Sommeer alle waarden binnen geselecteerd tijdvenster.", - "aggregation-type-count-hint": "Aantal gegevenspunten binnen geselecteerd tijdvenster.", + "aggregation-type-hint-common": "Om prestatieredenen is het berekenen van geaggregeerde waarden alleen beschikbaar voor vaste tijdsintervallen zoals \"huidige dag\", \"huidige maand\", enzovoort, en niet voor glijdende vensters zoals 'laatste 30 minuten' of 'laatste 24 uur'.", + "aggregation-type-none-hint": "Neem de laatste waarde.", + "aggregation-type-min-hint": "Bepaal de minimumwaarde uit gegevenspunten binnen het geselecteerde tijdvenster.", + "aggregation-type-max-hint": "Bepaal de maximumwaarde uit gegevenspunten binnen het geselecteerde tijdvenster.", + "aggregation-type-avg-hint": "Bereken de gemiddelde waarde uit gegevenspunten binnen het geselecteerde tijdvenster.", + "aggregation-type-sum-hint": "Sommeer alle waarden van de gegevenspunten binnen het geselecteerde tijdvenster.", + "aggregation-type-count-hint": "Totaal aantal gegevenspunten binnen het geselecteerde tijdvenster.", "delta-calculation": "Delta-berekening", "enable-delta-calculation": "Delta-berekening inschakelen", - "enable-delta-calculation-hint": "Bij inschakeling wordt waarde berekend op basis van geaggregeerde gegevens in gekozen tijdsvenster en vergelijkingsperiode. Alleen beschikbaar voor historische vensters.", - "delta-calculation-result": "Resultaat delta-berekening", + "enable-delta-calculation-hint": "Indien ingeschakeld, wordt de waarde van de gegevenssleutel berekend op basis van geaggregeerde waarden voor een geselecteerd tijdvenster en een opgegeven vergelijkingsperiode. Om prestatie­redenen is delta-berekening alleen beschikbaar voor historische tijdvensters en niet voor real-time waarden. U kunt bijvoorbeeld het verschil berekenen tussen het energieverbruik van gisteren en dat van eergisteren.", + "delta-calculation-result": "Resultaat van delta-berekening", "delta-calculation-result-previous-value": "Vorige waarde", "delta-calculation-result-delta-absolute": "Delta (absoluut)", - "delta-calculation-result-delta-percent": "Delta (procent)", + "delta-calculation-result-delta-percent": "Delta (percentage)", "source": "Bron", "latest": "Laatste", "latest-value": "Laatste waarde", @@ -1607,32 +1717,32 @@ "lwm2m-security-config": { "identity": "Clientidentiteit", "identity-required": "Clientidentiteit is verplicht.", - "identity-tooltip": "De PSK-identificatie is een willekeurige identificatie tot 128 bytes volgens [RFC7925]. Moet eerst naar een tekenreeks worden omgezet en vervolgens in UTF-8 worden gecodeerd.", + "identity-tooltip": "De PSK-identificatie is een willekeurige identificatie tot 128 bytes zoals beschreven in de standaard [RFC7925].\nDe PSK-identificatie MOET eerst worden omgezet naar een tekenreeks en vervolgens in UTF-8 worden gecodeerd.", "client-key": "Clientsleutel", "client-key-required": "Clientsleutel is verplicht.", - "client-key-tooltip-prk": "RPK publieke sleutel of ID moet voldoen aan [RFC7250] en gecodeerd zijn in Base64-formaat!", - "client-key-tooltip-psk": "PSK-sleutel moet voldoen aan [RFC4279] en in HexDec-formaat zijn: 32, 64 of 128 tekens!", - "endpoint": "Endpoint clientnaam", - "endpoint-required": "Endpoint clientnaam is verplicht.", - "client-public-key": "Publieke client sleutel", - "client-public-key-hint": "Als leeg, wordt vertrouwd certificaat gebruikt", - "client-public-key-tooltip": "X509 publieke sleutel moet DER-gecodeerd X509v3-formaat zijn, EC-algoritme ondersteunen en Base64-gecodeerd zijn!", - "mode": "Beveiligingsconfiguratie-modus", - "client-tab": "Clientbeveiliging", + "client-key-tooltip-prk": "RPK publieke sleutel of ID moet voldoen aan de standaard [RFC7250] en gecodeerd zijn in Base64-formaat!", + "client-key-tooltip-psk": "PSK-sleutel moet voldoen aan de standaard [RFC4279] en in HexDec-formaat zijn: 32, 64 of 128 tekens!", + "endpoint": "Client endpointnaam", + "endpoint-required": "Client endpointnaam is verplicht.", + "client-public-key": "Publieke clientsleutel", + "client-public-key-hint": "Als de publieke clientsleutel leeg is, wordt het vertrouwde certificaat gebruikt.", + "client-public-key-tooltip": "De X509 publieke sleutel moet in DER-gecodeerd X509v3-formaat zijn, uitsluitend het EC-algoritme ondersteunen en worden gecodeerd in Base64-formaat!", + "mode": "Beveiligingsconfiguratiemodus", + "client-tab": "Clientbeveiligingsconfiguratie", "client-certificate": "Clientcertificaat", - "bootstrap-tab": "Bootstrap-client", - "bootstrap-server": "Bootstrap-server", + "bootstrap-tab": "Bootstrapclient", + "bootstrap-server": "Bootstrapserver", "lwm2m-server": "LwM2M-server", "client-publicKey-or-id": "Client publieke sleutel of ID", "client-publicKey-or-id-required": "Client publieke sleutel of ID is verplicht.", - "client-publicKey-or-id-tooltip-psk": "PSK-ID max. 128 bytes volgens [RFC7925], omzetten naar string en UTF-8 coderen.", - "client-publicKey-or-id-tooltip-rpk": "RPK moet [RFC7250] volgen en Base64-gecodeerd zijn!", - "client-publicKey-or-id-tooltip-x509": "X509 moet DER-gecodeerd X509v3 zijn met EC-algoritme en Base64-gecodeerd!", - "client-secret-key": "Clientgeheime sleutel", - "client-secret-key-required": "Clientgeheime sleutel is verplicht.", - "client-secret-key-tooltip-psk": "PSK moet [RFC4279] volgen en HexDec (32, 64, 128 tekens) zijn!", - "client-secret-key-tooltip-prk": "RPK geheime sleutel moet in PKCS_8 (DER, [RFC5958]) zijn en Base64-gecodeerd!", - "client-secret-key-tooltip-x509": "X509 geheime sleutel moet in PKCS_8 (DER, [RFC5958]) zijn en Base64-gecodeerd!" + "client-publicKey-or-id-tooltip-psk": "De PSK-identificatie is een willekeurige identificatie tot 128 bytes zoals beschreven in de standaard [RFC7925].\nDe PSK-identificatie MOET eerst worden omgezet naar een tekenreeks en vervolgens in UTF-8 worden gecodeerd.", + "client-publicKey-or-id-tooltip-rpk": "RPK moet voldoen aan de standaard [RFC7250] en gecodeerd zijn in Base64-formaat!", + "client-publicKey-or-id-tooltip-x509": "X509 moet in DER-gecodeerd X509v3-formaat zijn, uitsluitend het EC-algoritme ondersteunen en worden gecodeerd in Base64-formaat.", + "client-secret-key": "Client geheime sleutel", + "client-secret-key-required": "Client geheime sleutel is verplicht.", + "client-secret-key-tooltip-psk": "PSK moet voldoen aan de standaard [RFC4279] en in HexDec-formaat zijn (32, 64 of 128 tekens)!", + "client-secret-key-tooltip-prk": "RPK geheime sleutel moet in PKCS_8-formaat zijn (DER-gecodeerd, standaard [RFC5958]) en worden gecodeerd in Base64-formaat!", + "client-secret-key-tooltip-x509": "X509 geheime sleutel moet in PKCS_8-formaat zijn (DER-gecodeerd, standaard [RFC5958]) en worden gecodeerd in Base64-formaat!" }, "client-id": "Client-ID", "client-id-pattern": "Bevat ongeldig teken.", @@ -1659,31 +1769,31 @@ "label": "Label", "events": "Gebeurtenissen", "details": "Details", - "copyId": "Apparaat-ID kopiëren", - "copyAccessToken": "Access token kopiëren", - "copy-mqtt-authentication": "MQTT-referenties kopiëren", - "idCopiedMessage": "Apparaat-ID is gekopieerd", - "accessTokenCopiedMessage": "Access token is gekopieerd", - "mqtt-authentication-copied-message": "MQTT-authenticatie is gekopieerd", + "copyId": "Kopieer apparaat-ID", + "copyAccessToken": "Kopieer toegangstoken", + "copy-mqtt-authentication": "Kopieer MQTT-inloggegevens", + "idCopiedMessage": "Apparaat-ID is gekopieerd naar het klembord", + "accessTokenCopiedMessage": "Toegangstoken van apparaat is gekopieerd naar het klembord", + "mqtt-authentication-copied-message": "MQTT-authenticatie van apparaat is gekopieerd naar het klembord", "assignedToCustomer": "Toegewezen aan klant", - "unable-delete-device-alias-title": "Kan apparaatalias niet verwijderen", - "unable-delete-device-alias-text": "Alias '{{deviceAlias}}' kan niet worden verwijderd omdat deze wordt gebruikt door de volgende widget(s):
{{widgetsList}}", + "unable-delete-device-alias-title": "Kan apparaat-alias niet verwijderen", + "unable-delete-device-alias-text": "Apparaat-alias '{{deviceAlias}}' kan niet worden verwijderd omdat het wordt gebruikt door de volgende widget(s):
{{widgetsList}}", "is-gateway": "Is gateway", - "overwrite-activity-time": "Overschrijf activiteitsmoment verbonden apparaat", + "overwrite-activity-time": "Activiteitstijd voor verbonden apparaat overschrijven", "device-filter": "Apparaatfilter", "device-filter-title": "Apparaatfilter", "filter-title": "Filter", "device-state": "Apparaatstatus", "state": "Status", - "any": "Elke", + "any": "Alles", "active": "Actief", "inactive": "Inactief", "public": "Openbaar", "device-public": "Apparaat is openbaar", "select-device": "Selecteer apparaat", - "import": "Apparaat importeren", + "import": "Importeer apparaat", "device-file": "Apparaatbestand", - "search": "Apparaten zoeken", + "search": "Zoek apparaten", "selected-devices": "{ count, plural, =1 {1 apparaat} other {# apparaten} } geselecteerd", "device-configuration": "Apparaatconfiguratie", "transport-configuration": "Transportconfiguratie", @@ -1753,8 +1863,9 @@ "step": "Stap", "selected-options-limit": "Limiet geselecteerde opties", "advanced-ui-settings": "Geavanceerde UI-instellingen", - "disable-on-property": "Uitschakelen op eigenschap", - "display-condition-function": "Weergavevoorwaarde functie", + "disable-on-property": "Uitschakelen op basis van eigenschap", + "disable-on-property-none": "Geen (veld altijd ingeschakeld)", + "display-condition-function": "Functie voor weergavevoorwaarde", "sub-label": "Sublabel", "vertical-divider-after": "Verticale scheiding na", "input-field-suffix": "Achtervoegsel invoerveld", @@ -1787,7 +1898,8 @@ "array-item": "Array-item", "item-type": "Itemtype", "item-name": "Itemnaam", - "no-items": "Geen items" + "no-items": "Geen items", + "support-unit-conversion": "Ondersteuning voor eenheidsconversie" }, "clear-form": "Formulier wissen", "clear-form-prompt": "Weet u zeker dat u alle formulier-eigenschappen wilt verwijderen?", @@ -1882,35 +1994,36 @@ "default": "Standaard", "profile-configuration": "Profielconfiguratie", "transport-configuration": "Transportconfiguratie", - "default-rule-chain": "Standaard regelketen", - "default-edge-rule-chain": "Standaard edge regelketen", - "default-edge-rule-chain-hint": "Gebruikt op edge voor verwerking van gegevens voor apparaten met dit profiel", + "default-rule-chain": "Standaardregelketen", + "default-edge-rule-chain": "Standaard edge-regelketen", + "default-edge-rule-chain-hint": "Gebruikt op de edge als regelketen om inkomende gegevens te verwerken voor apparaten van dit apparaatprofiel.", "mobile-dashboard": "Mobiel dashboard", - "mobile-dashboard-hint": "Gebruikt door mobiele app als apparaatoverzicht", - "select-queue-hint": "Selecteer uit de keuzelijst.", + "mobile-dashboard-hint": "Gebruikt door de mobiele applicatie als apparaatdetailsdashboard.", + "select-queue-hint": "Selecteer uit een vervolgkeuzelijst.", "delete-device-profile-title": "Weet u zeker dat u het apparaatprofiel '{{deviceProfileName}}' wilt verwijderen?", - "delete-device-profile-text": "Let op: het apparaatprofiel en gerelateerde gegevens, inclusief OTA-updates, worden onherstelbaar verwijderd.", + "delete-device-profile-text": "Wees voorzichtig, na bevestiging worden het apparaatprofiel en alle gerelateerde gegevens, inclusief bijbehorende OTA-updates, onherstelbaar verwijderd.", "delete-device-profiles-title": "Weet u zeker dat u { count, plural, =1 {1 apparaatprofiel} other {# apparaatprofielen} } wilt verwijderen?", - "delete-device-profiles-text": "Let op: alle geselecteerde profielen en gerelateerde gegevens inclusief OTA-updates worden onherstelbaar verwijderd.", - "set-default-device-profile-title": "Wilt u '{{deviceProfileName}}' instellen als standaardprofiel?", - "set-default-device-profile-text": "Na bevestiging wordt dit profiel gebruikt voor nieuwe apparaten zonder specifiek profiel.", + "delete-device-profiles-text": "Wees voorzichtig, na bevestiging worden alle geselecteerde apparaatprofielen verwijderd en alle gerelateerde gegevens, inclusief bijbehorende OTA-updates, onherstelbaar verwijderd.", + "set-default-device-profile-title": "Weet u zeker dat u het apparaatprofiel '{{deviceProfileName}}' als standaard wilt instellen?", + "set-default-device-profile-text": "Na bevestiging wordt het apparaatprofiel als standaard gemarkeerd en gebruikt voor nieuwe apparaten zonder opgegeven profiel.", "no-device-profiles-found": "Geen apparaatprofielen gevonden.", - "create-new-device-profile": "Nieuwe aanmaken!", - "mqtt-device-topic-filters": "MQTT apparaattopicfilters", - "mqtt-device-topic-filters-unique": "MQTT apparaattopicfilters moeten uniek zijn.", - "mqtt-device-topic-filters-spark-plug": "MQTT Sparkplug B Edge of Network (EoN) node.", - "mqtt-device-topic-filters-spark-plug-hint": "Sta verbindingen toe van EoN-nodes met Sparkplug B payload en topicstructuur.", - "mqtt-device-topic-filters-spark-plug-attribute-metric-names": "SparkPlug-metingen als attributen opslaan.", - "mqtt-device-topic-filters-spark-plug-attribute-metric-names-hint": "SparkPlug-metingen worden opgeslagen als attributen; overige als telemetrie.", - "mqtt-device-payload-type": "MQTT apparaatgegevensformaat", + "create-new-device-profile": "Maak een nieuwe aan!", + "mqtt-device-topic-filters": "MQTT-apparaatonderwerpfilters", + "mqtt-device-topic-filters-unique": "MQTT-apparaatonderwerpfilters moeten uniek zijn.", + "mqtt-device-topic-filters-spark-plug": "MQTT Sparkplug B Edge of Network (EoN)-knooppunt.", + "mqtt-device-topic-filters-spark-plug-hint": "Sta verbindingen toe van EoN-knooppunten met Sparkplug B-payload en onderwerpformaat.", + "mqtt-device-topic-filters-spark-plug-attribute-metric-names": "SparkPlug-metingen opslaan als attributen.", + "mqtt-device-topic-filters-spark-plug-attribute-metric-names-hint": "Namen van SparkPlug-metingen die als apparaatattributen worden opgeslagen. Alle overige metingen worden als apparaattelmetrie opgeslagen.", + "mqtt-device-payload-type": "MQTT-apparaatpayload", "mqtt-device-payload-type-json": "JSON", "mqtt-device-payload-type-proto": "Protobuf", - "mqtt-enable-compatibility-with-json-payload-format": "Compatibiliteit met ander formaat inschakelen", - "mqtt-enable-compatibility-with-json-payload-format-hint": "Bij inschakelen wordt standaard Protobuf gebruikt. Bij fout wordt JSON geprobeerd. Handig tijdens firmware-overgangen. Kan prestaties beïnvloeden.", - "mqtt-use-json-format-for-default-downlink-topics": "Gebruik JSON voor standaard downlink topics", - "mqtt-use-json-format-for-default-downlink-topics-hint": "Indien ingeschakeld, worden JSON payloads gebruikt voor standaard topics zoals v1/devices/me/attributes. Dit heeft geen invloed op v2-topics.", - "mqtt-send-ack-on-validation-exception": "Stuur PUBACK bij validatiefout", - "mqtt-send-ack-on-validation-exception-hint": "Standaard sluit platform sessie. Indien ingeschakeld, wordt PUBACK gestuurd bij fout.", + "mqtt-enable-compatibility-with-json-payload-format": "Compatibiliteit inschakelen met andere payloadformaten.", + "mqtt-enable-compatibility-with-json-payload-format-hint": "Wanneer ingeschakeld, gebruikt het platform standaard het Protobuf-payloadformaat. Als parseren mislukt, probeert het platform het JSON-formaat te gebruiken. Handig voor backward compatibility tijdens firmware-updates. Bijvoorbeeld: de initiële firmwareversie gebruikt JSON, terwijl de nieuwe versie Protobuf gebruikt. Tijdens het firmware-updateproces van het gehele apparaatbestand is ondersteuning voor beide vereist. De compatibiliteitsmodus veroorzaakt lichte prestatievermindering, dus wordt aanbevolen deze uit te schakelen zodra alle apparaten zijn bijgewerkt.", + "mqtt-use-json-format-for-default-downlink-topics": "Gebruik JSON-formaat voor standaard downlink-onderwerpen", + "mqtt-use-json-format-for-default-downlink-topics-hint": "Wanneer ingeschakeld, gebruikt het platform JSON-payloadformaat om attributen en RPC te verzenden via de volgende onderwerpen: v1/devices/me/attributes/response/$request_id, v1/devices/me/attributes, v1/devices/me/rpc/request/$request_id, v1/devices/me/rpc/response/$request_id. Deze instelling heeft geen invloed op attributen en RPC-abonnementen die via nieuwe (v2) onderwerpen worden verzonden: v2/a/res/$request_id, v2/a, v2/r/req/$request_id, v2/r/res/$request_id. Waarbij $request_id een geheel getal is als aanvraag-ID.", + "mqtt-send-ack-on-validation-exception": "PUBACK verzenden bij validatiefout van PUBLISH-bericht", + "mqtt-send-ack-on-validation-exception-hint": "Standaard sluit het platform de MQTT-sessie bij een validatiefout. Wanneer ingeschakeld, verzendt het platform een publicatiebevestiging in plaats van de sessie te sluiten.", + "mqtt-protocol-version": "Protocolversie", "snmp-add-mapping": "SNMP-mapping toevoegen", "snmp-mapping-not-configured": "Geen mapping geconfigureerd van OID naar telemetrie", "snmp-timseries-or-attribute-name": "Naam tijdreeks/attribuut voor mapping", @@ -2143,38 +2256,41 @@ "tqs": "TQS: TCP + SMS actief; TCP in wachtrijmodus (niet ondersteund sinds LWM2M 1.1)", "sq": "SQ: SMS in wachtrijmodus (niet ondersteund sinds LWM2M 1.1)" }, - "binding-tooltip": "Bindingmodus zoals gedefinieerd in resource /1/x/7 van het LwM2M-serverobject.\nGeeft ondersteunde bindingen aan in de client. Deze waarde moet overeenkomen met waarde in resource /3/0/16.\nSlechts één binding kan gebruikt worden per sessie.", + "binding-tooltip": "Dit is de lijst in de 'binding'-resource van het LwM2M-serverobject - /1/x/7.\nGeeft de ondersteunde verbindingsmodi aan in de LwM2M-client.\nDeze waarde MOET gelijk zijn aan de waarde in de resource 'Supported Binding and Modes' in het apparaatobject (/3/0/16).\nHoewel meerdere transporten worden ondersteund, kan slechts één transportbinding worden gebruikt tijdens de gehele transportsessie.\nBijvoorbeeld: wanneer UDP en SMS beide worden ondersteund, kunnen de LwM2M-client en -server kiezen om te communiceren via ofwel UDP ofwel SMS gedurende de gehele transportsessie.", "bootstrap-server": "Bootstrapserver", "lwm2m-server": "LwM2M-server", - "include-bootstrap-server": "Bootstrapserver-updates insluiten", - "bootstrap-update-title": "Er is al een Bootstrapserver geconfigureerd. Weet je zeker dat je de updates wilt uitsluiten?", - "bootstrap-update-text": "Wees voorzichtig, na bevestiging wordt de configuratie van de Bootstrapserver verwijderd.", + "include-bootstrap-server": "Bootstrapserver-updates opnemen", + "bootstrap-update-title": "U hebt al een bootstrapserver geconfigureerd. Weet u zeker dat u de updates wilt uitsluiten?", + "bootstrap-update-text": "Wees voorzichtig, na bevestiging worden de configuratiegegevens van de bootstrapserver onherstelbaar verwijderd.", "server-host": "Host", "server-host-required": "Host is verplicht.", "server-port": "Poort", "server-port-required": "Poort is verplicht.", "server-port-pattern": "Poort moet een positief geheel getal zijn.", "server-port-range": "Poort moet tussen 1 en 65535 liggen.", - "server-public-key": "Server openbare sleutel", - "server-public-key-required": "Server openbare sleutel is verplicht.", - "client-hold-off-time": "Wachttijd client", - "client-hold-off-time-required": "Wachttijd client is verplicht.", - "client-hold-off-time-pattern": "Wachttijd client moet een positief geheel getal zijn.", - "client-hold-off-time-tooltip": "Wachttijd van de client, alleen te gebruiken met een Bootstrap-server", + "server-public-key": "Publieke sleutel van server", + "server-public-key-required": "Publieke sleutel van server is verplicht.", + "client-hold-off-time": "Wachttijd", + "client-hold-off-time-required": "Wachttijd is verplicht.", + "client-hold-off-time-pattern": "Wachttijd moet een positief geheel getal zijn.", + "client-hold-off-time-tooltip": "Wachttijd van client, alleen voor gebruik met bootstrapserver", "account-after-timeout": "Account na time-out", "account-after-timeout-required": "Account na time-out is verplicht.", "account-after-timeout-pattern": "Account na time-out moet een positief geheel getal zijn.", - "account-after-timeout-tooltip": "Accountinstelling van de Bootstrap-server na de opgegeven time-out.", + "account-after-timeout-tooltip": "Bootstrapserver-account na de time-outwaarde opgegeven door deze resource.", "server-type": "Servertype", "add-new-server-title": "Nieuwe serverconfiguratie toevoegen", "add-server-config": "Serverconfiguratie toevoegen", "add-lwm2m-server-config": "LwM2M-server toevoegen", "no-config-servers": "Geen servers geconfigureerd", "others-tab": "Overige instellingen", - "client-strategy": "Clientstrategie bij verbinding", + "ota-update": "OTA-update", + "use-object-19-for-ota-update": "Object 19 gebruiken voor OTA-bestandsmetadata (checksum, grootte, versie, naam)", + "use-object-19-for-ota-update-hint": "Gebruik Resource ObjectId = 19 voor OTA-updates: Firmware → InstanceId = 65534, Software → InstanceId = 65535. Het gegevensformaat is JSON verpakt in Base64. Deze JSON bevat OTA-bestandsmetadata (bestandinfo): \"Checksum\" (SHA256). Extra velden: \"Title\" (OTA-naam), \"Version\" (OTA-versie), \"File Name\" (bestandsnaam voor opslag op client), \"File Size\" (OTA-grootte in bytes).", + "client-strategy": "Clientstrategie bij verbinden", "client-strategy-label": "Strategie", - "client-strategy-only-observe": "Alleen Observe-verzoek na eerste verbinding", - "client-strategy-read-all": "Lees alle bronnen & Observe-verzoek na registratie", + "client-strategy-only-observe": "Alleen Observe-verzoek naar de client na de initiële verbinding", + "client-strategy-read-all": "Alle resources lezen & Observe-verzoek na registratie verzenden", "fw-update": "Firmware-update", "fw-update-strategy": "Firmware-updatestrategie", "fw-update-strategy-data": "Firmware als binair bestand pushen via Object 19, Resource 0 (Data)", @@ -2201,7 +2317,17 @@ "default-object-id": "Standaard objectversie (Attribuut)", "default-object-id-ver": { "v1-0": "1.0", - "v1-1": "1.1" + "v1-1": "1.1", + "v1-2": "1.2" + }, + "observe-strategy": { + "observe-strategy": "Observe-strategie", + "single": "Enkelvoudig", + "single-description": "Eén Observe-verzoek per resource (hogere precisie, meer netwerkverkeer)", + "composite-all": "Alle samengesteld", + "composite-all-description": "Alle resources worden geobserveerd met één samengesteld Observe-verzoek (efficiënter, minder flexibel)", + "composite-by-object": "Samengesteld per object", + "composite-by-object-description": "Resources worden gegroepeerd per objecttype en geobserveerd via afzonderlijke samengestelde Observe-verzoeken (gebalanceerde aanpak)" } }, "snmp": { @@ -2514,19 +2640,21 @@ "type-rulechains": "Regelketens", "list-of-rulechains": "{ count, plural, =1 {Eén regelketen} other {Lijst van # regelketens} }", "rulechain-name-starts-with": "Regelketens met namen die beginnen met '{{prefix}}'", - "type-rulenode": "Regelknooppunt", - "type-rulenodes": "Regelknooppunten", - "list-of-rulenodes": "{ count, plural, =1 {Eén regelknooppunt} other {Lijst van # regelknooppunten} }", - "rulenode-name-starts-with": "Regelknooppunten met namen die beginnen met '{{prefix}}'", + "type-rulenode": "Regelknoop", + "type-rulenodes": "Regelknopen", + "list-of-rulenodes": "{ count, plural, =1 {Eén regelknoop} other {Lijst van # regelknopen} }", + "rulenode-name-starts-with": "Regelknopen waarvan de namen beginnen met '{{prefix}}'", "type-current-customer": "Huidige klant", "type-current-tenant": "Huidige tenant", "type-current-user": "Huidige gebruiker", - "type-current-user-owner": "Eigenaar huidige gebruiker", + "type-current-user-owner": "Eigenaar van huidige gebruiker", "type-calculated-field": "Berekend veld", "type-calculated-fields": "Berekende velden", - "type-widgets-bundle": "Widget-bundel", - "type-widgets-bundles": "Widget-bundels", - "list-of-widgets-bundles": "{ count, plural, =1 {Eén widget-bundel} other {Lijst van # widget-bundels} }", + "type-ai-model": "AI-model", + "type-ai-models": "AI-modellen", + "type-widgets-bundle": "Widgetbundel", + "type-widgets-bundles": "Widgetbundels", + "list-of-widgets-bundles": "{ count, plural, =1 {Eén widgetbundel} other {Lijst van # widgetbundels} }", "type-widget": "Widget", "type-widgets": "Widgets", "list-of-widgets": "{ count, plural, =1 {Eén widget} other {Lijst van # widgets} }", @@ -2553,6 +2681,8 @@ "type-tb-resources": "Resources", "list-of-tb-resources": "{ count, plural, =1 {Eén resource} other {Lijst van # resources} }", "type-ota-package": "OTA-pakket", + "type-ota-packages": "OTA-pakketten", + "list-of-ota-packages": "{ count, plural, =1 {Eén OTA-pakket} other {Lijst van # OTA-pakketten} }", "type-rpc": "RPC", "type-queue": "Wachtrij", "type-queue-stats": "Wachtrijstatistieken", @@ -2604,92 +2734,92 @@ "owner-type": "Eigenaartype" }, "entity-view": { - "entity-view": "Entity view", - "entity-view-required": "Entity view is vereist.", - "entity-views": "Entity views", - "management": "Beheer van Entity Views", - "view-entity-views": "Bekijk Entity Views", - "entity-view-alias": "Entity view-alias", - "aliases": "Entity view-aliasen", + "entity-view": "Entiteitweergave", + "entity-view-required": "Entiteitweergave is verplicht.", + "entity-views": "Entiteitweergaven", + "management": "Beheer van entiteitweergaven", + "view-entity-views": "Bekijk entiteitweergaven", + "entity-view-alias": "Alias voor entiteitweergave", + "aliases": "Aliassen voor entiteitweergave", "no-alias-matching": "'{{alias}}' niet gevonden.", - "no-aliases-found": "Geen aliasen gevonden.", + "no-aliases-found": "Geen aliassen gevonden.", "no-key-matching": "'{{key}}' niet gevonden.", "no-keys-found": "Geen sleutels gevonden.", "create-new-alias": "Maak een nieuwe aan!", "create-new-key": "Maak een nieuwe aan!", - "duplicate-alias-error": "Dubbele alias gevonden '{{alias}}'.
Entity view-aliasen moeten uniek zijn binnen het dashboard.", + "duplicate-alias-error": "Dubbele alias gevonden '{{alias}}'.
Aliassen voor entiteitweergaven moeten uniek zijn binnen het dashboard.", "configure-alias": "Configureer alias '{{alias}}'", - "no-entity-views-matching": "Geen entity views gevonden die overeenkomen met '{{entity}}'.", + "no-entity-views-matching": "Geen entiteitweergaven gevonden die overeenkomen met '{{entity}}'.", "public": "Openbaar", "alias": "Alias", - "alias-required": "Entity view-alias is vereist.", - "remove-alias": "Verwijder entity view-alias", - "add-alias": "Voeg entity view-alias toe", - "name-starts-with": "Entity view naamexpressie", - "help-text": "Gebruik '%' naar behoefte: '%entity-view_name_contains%', '%entity-view_name_ends', 'entity-view_starts_with'.", - "entity-view-list": "Entity view-lijst", - "use-entity-view-name-filter": "Gebruik filter", - "entity-view-list-empty": "Geen entity views geselecteerd.", - "entity-view-name-filter-required": "Entity view naamfilter is vereist.", - "entity-view-name-filter-no-entity-view-matched": "Geen entity views gevonden die beginnen met '{{entityView}}'.", - "add": "Voeg entity view toe", - "entity-view-public": "Entity view is openbaar", + "alias-required": "Alias voor entiteitweergave is verplicht.", + "remove-alias": "Alias van entiteitweergave verwijderen", + "add-alias": "Alias voor entiteitweergave toevoegen", + "name-starts-with": "Naamexpressie van entiteitweergave", + "help-text": "Gebruik '%' waar nodig: '%entity-view_name_contains%', '%entity-view_name_ends', 'entity-view_starts_with'.", + "entity-view-list": "Lijst van entiteitweergaven", + "use-entity-view-name-filter": "Filter gebruiken", + "entity-view-list-empty": "Geen entiteitweergaven geselecteerd.", + "entity-view-name-filter-required": "Naamfilter voor entiteitweergave is verplicht.", + "entity-view-name-filter-no-entity-view-matched": "Geen entiteitweergaven gevonden die beginnen met '{{entityView}}'.", + "add": "Entiteitweergave toevoegen", + "entity-view-public": "Entiteitweergave is openbaar", "assign-to-customer": "Toewijzen aan klant", - "assign-entity-view-to-customer": "Wijs entity view(s) toe aan klant", - "assign-entity-view-to-customer-text": "Selecteer de entity views die u aan de klant wilt toewijzen", - "no-entity-views-text": "Geen entity views gevonden", - "assign-to-customer-text": "Selecteer de klant om de entity view(s) aan toe te wijzen", - "entity-view-details": "Details van entity view", - "add-entity-view-text": "Voeg nieuwe entity view toe", - "delete": "Verwijder entity view", - "assign-entity-views": "Wijs entity views toe", - "assign-entity-views-text": "{ count, plural, =1 {1 entity view} other {# entity views} } toewijzen aan klant", - "delete-entity-views": "Verwijder entity views", - "make-public": "Maak entity view openbaar", - "make-private": "Maak entity view privé", + "assign-entity-view-to-customer": "Entiteitweergave(n) toewijzen aan klant", + "assign-entity-view-to-customer-text": "Selecteer de entiteitweergaven die u aan de klant wilt toewijzen", + "no-entity-views-text": "Geen entiteitweergaven gevonden", + "assign-to-customer-text": "Selecteer de klant aan wie u de entiteitweergave(n) wilt toewijzen", + "entity-view-details": "Details van entiteitweergave", + "add-entity-view-text": "Nieuwe entiteitweergave toevoegen", + "delete": "Entiteitweergave verwijderen", + "assign-entity-views": "Entiteitweergaven toewijzen", + "assign-entity-views-text": "{ count, plural, =1 {1 entiteitweergave toewijzen aan klant} other {# entiteitweergaven toewijzen aan klant} }", + "delete-entity-views": "Entiteitweergaven verwijderen", + "make-public": "Maak entiteitweergave openbaar", + "make-private": "Maak entiteitweergave privé", "unassign-from-customer": "Ontkoppel van klant", - "unassign-entity-views": "Ontkoppel entity views", - "unassign-entity-views-action-title": "{ count, plural, =1 {1 entity view} other {# entity views} } ontkoppelen van klant", - "assign-new-entity-view": "Wijs nieuwe entity view toe", - "delete-entity-view-title": "Weet u zeker dat u de entity view '{{entityViewName}}' wilt verwijderen?", - "delete-entity-view-text": "Wees voorzichtig, na bevestiging wordt de entity view en alle gerelateerde gegevens permanent verwijderd.", - "delete-entity-views-title": "Weet u zeker dat u { count, plural, =1 {1 entity view} other {# entity views} } wilt verwijderen?", - "delete-entity-views-action-title": "Verwijder { count, plural, =1 {1 entity view} other {# entity views} }", - "delete-entity-views-text": "Wees voorzichtig, na bevestiging worden alle geselecteerde entity views verwijderd en worden gerelateerde gegevens permanent verwijderd.", - "make-public-entity-view-title": "Weet u zeker dat u de entity view '{{entityViewName}}' openbaar wilt maken?", - "make-public-entity-view-text": "Na bevestiging wordt de entity view en alle gegevens openbaar en toegankelijk voor anderen.", - "make-private-entity-view-title": "Weet u zeker dat u de entity view '{{entityViewName}}' privé wilt maken?", - "make-private-entity-view-text": "Na bevestiging wordt de entity view en alle gegevens privé en niet langer toegankelijk voor anderen.", - "unassign-entity-view-title": "Weet u zeker dat u de entity view '{{entityViewName}}' wilt ontkoppelen?", - "unassign-entity-view-text": "Na bevestiging wordt de entity view ontkoppeld en niet langer toegankelijk voor de klant.", - "unassign-entity-view": "Ontkoppel entity view", - "unassign-entity-views-title": "Weet u zeker dat u { count, plural, =1 {1 entity view} other {# entity views} } wilt ontkoppelen?", - "unassign-entity-views-text": "Na bevestiging worden alle geselecteerde entity views ontkoppeld en niet langer toegankelijk voor de klant.", - "entity-view-type": "Entity view-type", - "entity-view-type-required": "Entity view-type is vereist.", - "select-entity-view-type": "Selecteer entity view-type", - "enter-entity-view-type": "Voer entity view-type in", - "any-entity-view": "Elke entity view", - "no-entity-view-types-matching": "Geen entity view-types gevonden die overeenkomen met '{{entitySubtype}}'.", - "entity-view-type-list-empty": "Geen entity view-types geselecteerd.", - "entity-view-types": "Entity view-types", + "unassign-entity-views": "Entiteitweergaven ontkoppelen", + "unassign-entity-views-action-title": "{ count, plural, =1 {1 entiteitweergave ontkoppelen van klant} other {# entiteitweergaven ontkoppelen van klant} }", + "assign-new-entity-view": "Nieuwe entiteitweergave toewijzen", + "delete-entity-view-title": "Weet u zeker dat u de entiteitweergave '{{entityViewName}}' wilt verwijderen?", + "delete-entity-view-text": "Let op: na bevestiging wordt de entiteitweergave en alle bijbehorende gegevens permanent verwijderd.", + "delete-entity-views-title": "Weet u zeker dat u { count, plural, =1 {1 entiteitweergave} other {# entiteitweergaven} } wilt verwijderen?", + "delete-entity-views-action-title": "Verwijder { count, plural, =1 {1 entiteitweergave} other {# entiteitweergaven} }", + "delete-entity-views-text": "Let op: na bevestiging worden alle geselecteerde entiteitweergaven en bijbehorende gegevens permanent verwijderd.", + "make-public-entity-view-title": "Weet u zeker dat u de entiteitweergave '{{entityViewName}}' openbaar wilt maken?", + "make-public-entity-view-text": "Na bevestiging wordt de entiteitweergave en alle gegevens openbaar gemaakt en toegankelijk voor anderen.", + "make-private-entity-view-title": "Weet u zeker dat u de entiteitweergave '{{entityViewName}}' privé wilt maken?", + "make-private-entity-view-text": "Na bevestiging wordt de entiteitweergave en alle gegevens privé gemaakt en niet toegankelijk voor anderen.", + "unassign-entity-view-title": "Weet u zeker dat u de entiteitweergave '{{entityViewName}}' wilt ontkoppelen?", + "unassign-entity-view-text": "Na bevestiging wordt de entiteitweergave ontkoppeld en is deze niet langer toegankelijk voor de klant.", + "unassign-entity-view": "Ontkoppel entiteitweergave", + "unassign-entity-views-title": "Weet u zeker dat u { count, plural, =1 {1 entiteitweergave} other {# entiteitweergaven} } wilt ontkoppelen?", + "unassign-entity-views-text": "Na bevestiging worden alle geselecteerde entiteitweergaven ontkoppeld en zijn ze niet langer toegankelijk voor de klant.", + "entity-view-type": "Type entiteitweergave", + "entity-view-type-required": "Type entiteitweergave is verplicht.", + "select-entity-view-type": "Selecteer type entiteitweergave", + "enter-entity-view-type": "Voer type entiteitweergave in", + "any-entity-view": "Elke entiteitweergave", + "no-entity-view-types-matching": "Geen entiteitweergavetypes gevonden die overeenkomen met '{{entitySubtype}}'.", + "entity-view-type-list-empty": "Geen entiteitweergavetypes geselecteerd.", + "entity-view-types": "Entiteitweergavetypes", "created-time": "Aangemaakt op", "name": "Naam", - "name-required": "Naam is vereist.", + "name-required": "Naam is verplicht.", "name-max-length": "Naam moet minder dan 256 tekens zijn", - "type-max-length": "Entity view-type moet minder dan 256 tekens zijn", + "type-max-length": "Type entiteitweergave moet minder dan 256 tekens zijn", "description": "Beschrijving", "events": "Gebeurtenissen", "details": "Details", - "copyId": "Kopieer entity view-ID", - "idCopiedMessage": "Entity view-ID is gekopieerd naar klembord", + "copyId": "Kopieer entiteitweergave-ID", + "idCopiedMessage": "Entiteitweergave-ID is gekopieerd naar het klembord", "assignedToCustomer": "Toegewezen aan klant", - "unable-entity-view-device-alias-title": "Kan entity view-alias niet verwijderen", - "unable-entity-view-device-alias-text": "Device-alias '{{entityViewAlias}}' kan niet worden verwijderd omdat deze wordt gebruikt door de volgende widget(s):
{{widgetsList}}", - "select-entity-view": "Selecteer entity view", + "unable-entity-view-device-alias-title": "Kan alias voor entiteitweergave niet verwijderen", + "unable-entity-view-device-alias-text": "Apparaatalias '{{entityViewAlias}}' kan niet worden verwijderd omdat deze wordt gebruikt door de volgende widget(s):
{{widgetsList}}", + "select-entity-view": "Selecteer entiteitweergave", "start-ts": "Starttijd", "end-ts": "Eindtijd", - "date-limits": "Datumbeperkingen", + "date-limits": "Datumlimieten", "client-attributes": "Clientattributen", "shared-attributes": "Gedeelde attributen", "server-attributes": "Serverattributen", @@ -2699,20 +2829,20 @@ "server-attributes-placeholder": "Serverattributen", "timeseries-placeholder": "Tijdreeks", "target-entity": "Doelentiteit", - "attributes-propagation": "Attributenpropagatie", - "attributes-propagation-hint": "Entity View zal automatisch gespecificeerde attributen kopiëren van de Doelentiteit telkens wanneer u deze entity view opslaat of bijwerkt. Omwille van prestatie-redenen worden attributen van de doelentiteit niet automatisch gesynchroniseerd bij elke wijziging. U kunt automatische propagatie inschakelen door een \"copy to view\" regelnode te configureren in uw regelketen en \"Post attributes\" en \"Attributes Updated\" berichten te koppelen aan de nieuwe regelnode.", + "attributes-propagation": "Attribuutpropagatie", + "attributes-propagation-hint": "De entiteitweergave kopieert automatisch opgegeven attributen van de doelentiteit telkens wanneer je deze entiteitweergave opslaat of bijwerkt. Om prestatieredenen worden attributen van de doelentiteit niet bij elke wijziging doorgegeven. Je kunt automatische propagatie inschakelen door een \"copy to view\"-regelnode te configureren in je regelketen en \"Post attributes\" en \"Attributes Updated\" berichten eraan te koppelen.", "timeseries-data": "Tijdreeksgegevens", - "timeseries-data-hint": "Configureer tijdreeksgegevenssleutels van de doelentiteit die toegankelijk zullen zijn voor de entity view. Deze tijdreeksgegevens zijn alleen-lezen.", - "search": "Zoek entity views", - "selected-entity-views": "{ count, plural, =1 {1 entity view} other {# entity views} } geselecteerd", - "assign-entity-view-to-edge": "Wijs entity view(s) toe aan Edge", - "assign-entity-view-to-edge-text": "Selecteer de entity views die u aan de edge wilt toewijzen", - "unassign-entity-view-from-edge-title": "Weet u zeker dat u de entity view '{{entityViewName}}' wilt ontkoppelen?", - "unassign-entity-view-from-edge-text": "Na bevestiging wordt de entity view ontkoppeld en niet langer toegankelijk door de edge.", - "unassign-entity-views-from-edge-action-title": "{ count, plural, =1 {1 entity view} other {# entity views} } ontkoppelen van edge", - "unassign-entity-view-from-edge": "Ontkoppel entity view", - "unassign-entity-views-from-edge-title": "Weet u zeker dat u { count, plural, =1 {1 entity view} other {# entity views} } wilt ontkoppelen?", - "unassign-entity-views-from-edge-text": "Na bevestiging worden alle geselecteerde entity views ontkoppeld en niet langer toegankelijk door de edge." + "timeseries-data-hint": "Configureer de sleutels van tijdreeksgegevens van de doelentiteit die toegankelijk zullen zijn voor de entiteitweergave. Deze tijdreeksgegevens zijn alleen-lezen.", + "search": "Zoek entiteitweergaven", + "selected-entity-views": "{ count, plural, =1 {1 entiteitweergave} other {# entiteitweergaven} } geselecteerd", + "assign-entity-view-to-edge": "Wijs entiteitweergave(n) toe aan edge", + "assign-entity-view-to-edge-text": "Selecteer de entiteitweergaven om toe te wijzen aan de edge", + "unassign-entity-view-from-edge-title": "Weet je zeker dat je de entiteitweergave '{{entityViewName}}' wilt loskoppelen?", + "unassign-entity-view-from-edge-text": "Na bevestiging wordt de entiteitweergave losgekoppeld en is deze niet langer toegankelijk via de edge.", + "unassign-entity-views-from-edge-action-title": "Koppel { count, plural, =1 {1 entiteitweergave} other {# entiteitweergaven} } los van edge", + "unassign-entity-view-from-edge": "Koppel entiteitweergave los", + "unassign-entity-views-from-edge-title": "Weet je zeker dat je { count, plural, =1 {1 entiteitweergave} other {# entiteitweergaven} } wilt loskoppelen?", + "unassign-entity-views-from-edge-text": "Na bevestiging worden alle geselecteerde entiteitweergaven losgekoppeld en zijn ze niet langer toegankelijk via de edge." }, "event": { "event-type": "Gebeurtenistype", @@ -2929,15 +3059,16 @@ "add": "Filter toevoegen", "edit": "Filter bewerken", "name": "Filternaam", - "name-required": "Filternaam is vereist.", - "duplicate-filter": "Er bestaat al een filter met dezelfde naam.", + "name-required": "Filternaam is verplicht.", + "duplicate-filter": "Een filter met dezelfde naam bestaat al.", "filters": "Filters", "unable-delete-filter-title": "Kan filter niet verwijderen", "unable-delete-filter-text": "Filter '{{filter}}' kan niet worden verwijderd omdat deze wordt gebruikt door de volgende widget(s):
{{widgetsList}}", - "duplicate-filter-error": "Duplicaatfilter gevonden '{{filter}}'.
Filters moeten uniek zijn binnen het dashboard.", + "duplicate-filter-error": "Dubbele filter gevonden '{{filter}}'.
Filters moeten uniek zijn binnen het dashboard.", "missing-key-filters-error": "Sleutelfilters ontbreken voor filter '{{filter}}'.", "filter": "Filter", "editable": "Bewerkbaar", + "editable-hint": "Sta gebruikers toe de filterwaarde in dashboards aan te passen.", "no-filters-found": "Geen filters gevonden.", "no-filter-text": "Geen filter opgegeven", "add-filter-prompt": "Voeg een filter toe", @@ -2962,22 +3093,24 @@ "in": "in", "not-in": "niet in" }, - "ignore-case": "negeer hoofdlettergebruik", + "ignore-case": "Hoofdlettergevoeligheid negeren", "value": "Waarde", - "remove-filter": "Verwijder filter", - "duplicate-filter-action": "Dupliceer filter", + "remove-filter": "Filter verwijderen", + "duplicate-filter-action": "Filter dupliceren", "preview": "Filtervoorbeeld", "no-filters": "Geen filters geconfigureerd", "add-filter": "Filter toevoegen", - "add-complex-filter": "Complex filter toevoegen", - "add-complex": "Voeg complex toe", - "complex-filter": "Complex filter", - "edit-complex-filter": "Complex filter bewerken", - "edit-filter-user-params": "Filtergebruikersparameters bewerken", - "filter-user-params": "Filtergebruikersparameters", + "add-complex-filter": "Complexe filter toevoegen", + "add-complex": "Complex toevoegen", + "complex-filter": "Complexe filter", + "edit-complex-filter": "Complexe filter bewerken", + "edit-filter-user-params": "Gebruikersparameters van filtervoorwaarde bewerken", + "filter-user-params": "Gebruikersparameters van filtervoorwaarde", "user-parameters": "Gebruikersparameters", - "display-label": "Label om weer te geven", - "order-priority": "Volgordeprioriteit van veld", + "display-label": "Weergavelabel", + "custom-label": "Aangepast label", + "custom-label-hint": "Inschakelen om je eigen label voor de filter in te stellen. Wanneer uitgeschakeld, wordt automatisch een label gegenereerd.", + "order-priority": "Weergavevolgorde", "key-filter": "Sleutelfilter", "key-filters": "Sleutelfilters", "key-name": "Sleutelnaam", @@ -3021,7 +3154,8 @@ "switch-to-dynamic-value": "Overschakelen naar dynamische waarde", "switch-to-default-value": "Overschakelen naar standaardwaarde", "inherit-owner": "Overnemen van eigenaar", - "source-attribute-not-set": "Als het bronattribuut niet is ingesteld" + "source-attribute-not-set": "Als bronattribuut niet is ingesteld", + "unit": "Eenheid" }, "fullscreen": { "expand": "Vergroot naar volledig scherm", @@ -3406,10 +3540,11 @@ "power-button-background": "Achtergrond stroomknop", "value-box-background": "Achtergrond waardeveld", "value-units": "Waarde-eenheden", + "enable-units-scale": "Eenheden op schaal inschakelen", "filtration-mode": "Filtratiemodus", - "filtration-mode-hint": "Geheel getal dat huidige filtratiemodus aangeeft.", - "filtration-mode-update": "Filtratiemodus bijwerken", - "filtration-mode-update-hint": "Actie uitgevoerd bij wijziging van filtratiemodus.", + "filtration-mode-hint": "Geheel getal dat de huidige filtratiemodus aangeeft.", + "filtration-mode-update": "Update-status filtratiemodus", + "filtration-mode-update-hint": "Actie die wordt uitgevoerd wanneer de gebruiker klikt om de huidige filtratiemodus te wijzigen.", "filter-mode": "Filter", "waste-mode": "Afval", "backwash-mode": "Terugspoelen", @@ -3721,7 +3856,9 @@ "mobile-package": "Applicatiepakket", "mobile-package-max-length": "Applicatiepakket mag niet langer zijn dan 256 tekens", "mobile-package-required": "Applicatiepakket is verplicht.", - "mobile-package-pattern": "Ongeldig formaat applicatiepakket", + "mobile-package-pattern": "Ongeldig formaat van applicatiepakket", + "mobile-package-title": "Applicatietitel", + "mobile-package-title-max-length": "Applicatietitel mag niet langer zijn dan 256 tekens", "no-application": "Geen applicaties gevonden", "no-bundles": "Geen pakketten gevonden", "platform-type": "Platformtype", @@ -3802,20 +3939,16 @@ "configuration-app": "Configuratie-app", "configuration-step": { "prepare-environment-title": "Ontwikkelomgeving voorbereiden", - "prepare-environment-text": "Flutter ThingsBoard Mobile App vereist Flutter SDK. Volg de instructies om de Flutter SDK in te stellen.", - "get-source-code-title": "App-broncode verkrijgen", - "get-source-code-text": "Je kunt de broncode van de Flutter ThingsBoard Mobile App verkrijgen door deze uit de GitHub-repository te klonen:", - "configure-api-title": "ThingsBoard API-eindpunt configureren", - "configure-api-text": "Open het flutter_thingsboard_pe_app-project in je editor/IDE. Bewerk:", - "configure-api-hint": "Stel de waarde van de constant thingsBoardApiEndpoint in op het API-eindpunt van je ThingsBoard-serverinstantie. Gebruik geen 'localhost' of '127.0.0.1'.", - "run-app-title": "De app uitvoeren", - "run-app-text": "Voer de app uit zoals beschreven in je IDE.\nGebruik je de terminal, voer de app dan uit met het volgende commando:", - "more-information": "Gedetailleerde informatie vind je in onze Getting Started-documentatie.", - "getting-started": "Aan de slag", - "configure-package-title": "Applicatiepakket configureren", - "configure-package-text": "Je kunt het applicatiepakket handmatig wijzigen of een CLI-hulpprogramma van derden gebruiken.", - "configure-package-text-install": "Voer het volgende commando uit om de Rename CLI Tool te installeren:", - "configure-package-run-commands": "Voer deze commando’s uit in de hoofdmap van je project:" + "prepare-environment-text": "Flutter ThingsBoard Mobiele Applicatie vereist de Flutter SDK. Volg de instructies om de Flutter SDK in te stellen.", + "get-source-code-title": "Broncode van de app verkrijgen", + "get-source-code-text": "Je kunt de broncode van de Flutter ThingsBoard Mobiele Applicatie verkrijgen door deze te clonen vanuit de GitHub-repository:", + "configure-app-settings-title": "App-instellingen configureren", + "configure-app-settings-text": "Download het configuratiebestand en plaats het in de hoofdmap van het project dat je in de vorige stap hebt gekloond.", + "download-file": "Bestand downloaden", + "run-app-title": "App uitvoeren", + "run-app-text": "Voer de app uit zoals beschreven in je IDE.\nIndien je de terminal gebruikt, voer de app uit met het volgende commando:", + "more-information": "Gedetailleerde informatie vind je in onze documentatie voor een snelle start.", + "getting-started": "Snel starten" } }, "notification": { @@ -3839,20 +3972,22 @@ "new-platform-version-trigger-settings": "Triggerinstellingen voor nieuwe platformversie", "rate-limits-trigger-settings": "Triggerinstellingen voor overschreden snelheidslimieten", "task-processing-failure-trigger-settings": "Triggerinstellingen voor taakverwerkingsfouten", - "at-least-one-should-be-selected": "Ten minste één moet worden geselecteerd", + "resources-shortage-trigger-settings": "Instellingen voor triggers bij tekort aan middelen", + "at-least-one-should-be-selected": "Ten minste één optie moet geselecteerd zijn", "basic-settings": "Basisinstellingen", "button-text": "Knoptekst", "button-text-required": "Knoptekst is verplicht", - "button-text-max-length": "Knoptekst mag niet langer zijn dan {{ length }} tekens", + "button-text-max-length": "Knoptekst mag maximaal {{ length }} tekens bevatten", "compose": "Samenstellen", "conversation": "Gesprek", "conversation-required": "Gesprek is verplicht", - "copy-notification-template": "Meldingssjabloon kopiëren", - "copy-rule": "Regel kopiëren", - "copy-template": "Sjabloon kopiëren", + "copy-notification-template": "Kopieer notificatiesjabloon", + "copy-rule": "Kopieer regel", + "copy-template": "Kopieer sjabloon", "create-new": "Nieuw aanmaken", - "created": "Gemaakt", + "created": "Aangemaakt", "customize-messages": "Berichten aanpassen", + "cpu-threshold": "CPU-drempelwaarde", "delete-notification-text": "Wees voorzichtig, na bevestiging is de melding niet meer herstelbaar.", "delete-notification-title": "Weet u zeker dat u de melding wilt verwijderen?", "delete-notifications-text": "Wees voorzichtig, na bevestiging zijn meldingen niet meer herstelbaar.", @@ -3889,9 +4024,9 @@ "mobile-app": "Mobiele app", "mobile-app-preview": "Voorbeeld mobiele app-melding" }, - "delivery-method-not-configure-click": "Bezorgmethode is niet geconfigureerd. Klik om in te stellen.", - "delivery-method-not-configure-contact": "Bezorgmethode is niet geconfigureerd. Neem contact op met uw systeembeheerder.", - "delivery-methods": "Bezorgmethodes", + "delivery-method-not-configure-click": "Verzendmethode is niet geconfigureerd. Klik om in te stellen.", + "delivery-method-not-configure-contact": "Verzendmethode is niet geconfigureerd. Neem contact op met je systeembeheerder.", + "delivery-methods": "Verzendmethoden", "description": "Beschrijving", "device-activity-trigger-settings": "Triggerinstellingen voor apparaatactiviteit", "device-list-rule-hint": "Als dit veld leeg is, wordt de trigger toegepast op alle apparaten", @@ -3919,6 +4054,7 @@ "input-fields-support-templatization": "Invoervelden ondersteunen templatization.", "link": "Link", "link-required": "Link is verplicht", + "link-max-length": "Link mag maximaal {{ length }} tekens bevatten", "link-type": { "dashboard": "Dashboard openen", "link": "URL-link openen" @@ -3945,13 +4081,14 @@ "no-severity-found": "Geen ernstniveau gevonden", "no-severity-matching": "'{{severity}}' niet gevonden.", "no-template-matching": "Geen bron gevonden die overeenkomt met '{{template}}'.", + "create-new-template": "Maak een nieuwe aan!", "not-found-slack-recipient": "Slack-ontvanger niet gevonden", - "notification": "Melding", - "notification-center": "Meldingscentrum", - "notification-tap-action": "Actie bij tikken op melding", + "notification": "Notificatie", + "notification-center": "Notificatiecentrum", + "notification-tap-action": "Actie bij tikken op notificatie", "notification-tap-action-hint": "Indien niet ingeschakeld, wordt het standaard alarmdashboard gebruikt", - "notify": "Melden", - "notify-again": "Opnieuw melden", + "notify": "notificeren", + "notify-again": "Opnieuw notificeren", "notify-alarm-action": { "acknowledged": "Alarm bevestigd", "assigned": "Alarm toegewezen", @@ -3968,6 +4105,7 @@ "only-rule-chain-lifecycle-failures": "Alleen fouten in levenscyclus van regelketen", "only-rule-node-lifecycle-failures": "Alleen fouten in levenscyclus van regelknooppunt", "platform-users": "Platformgebruikers", + "ram-threshold": "RAM-drempelwaarde", "rate-limits": "Snelheidslimieten", "rate-limits-hint": "Als dit veld leeg is, wordt de trigger toegepast op alle snelheidslimieten", "recipient": "Ontvanger", @@ -4033,6 +4171,7 @@ "start-from-scratch": "Begin opnieuw", "status": "Status", "stop-escalation-alarm-status-become": "Stop escalatie wanneer de alarmstatus wordt:", + "storage-threshold": "Opslagdrempelwaarde", "subject": "Onderwerp", "subject-required": "Onderwerp is verplicht", "subject-max-length": "Onderwerp mag maximaal {{ length }} tekens bevatten", @@ -4041,20 +4180,21 @@ "template-required": "Sjabloon is verplicht", "template-type": { "alarm": "Alarm", - "alarm-assignment": "Alarmaanwijzing", + "alarm-assignment": "Toewijzing van alarm", "alarm-comment": "Alarmopmerking", - "api-usage-limit": "API-gebruiksgrens", + "api-usage-limit": "API-gebruikslimiet", "device-activity": "Apparaatactiviteit", "entities-limit": "Entiteitenlimiet", - "entity-action": "Entiteitactie", + "entity-action": "Entiteithandeling", "general": "Algemeen", "rule-engine-lifecycle-event": "Levenscyclusgebeurtenis van regelengine", "rule-node": "Regelknooppunt", "new-platform-version": "Nieuwe platformversie", - "rate-limits": "Overschreden snelheidslimieten", - "edge-communication-failure": "Edge communicatie storing", - "edge-connection": "Edge verbinding", - "task-processing-failure": "Taakverwerkingsfout" + "rate-limits": "Snelheidslimieten overschreden", + "edge-communication-failure": "Communicatiefout met edge", + "edge-connection": "Edge-verbinding", + "task-processing-failure": "Fout bij taakverwerking", + "resources-shortage": "Gebrek aan middelen" }, "templates": "Sjablonen", "notification-templates": "Meldingen / Sjablonen", @@ -4066,18 +4206,19 @@ "track-rule-node-events": "Volg gebeurtenissen van regelknooppunten", "trigger": { "alarm": "Alarm", - "alarm-assignment": "Alarmaanwijzing", + "alarm-assignment": "Toewijzing van alarm", "alarm-comment": "Alarmopmerking", - "api-usage-limit": "API-gebruiksgrens", + "api-usage-limit": "API-gebruikslimiet", "device-activity": "Apparaatactiviteit", "entities-limit": "Entiteitenlimiet", - "entity-action": "Entiteitactie", + "entity-action": "Entiteithandeling", "rule-engine-lifecycle-event": "Levenscyclusgebeurtenis van regelengine", "new-platform-version": "Nieuwe platformversie", - "rate-limits": "Overschreden snelheidslimieten", - "edge-connection": "Edge verbinding", - "edge-communication-failure": "Edge communicatie storing", - "task-processing-failure": "Taakverwerkingsfout", + "rate-limits": "Snelheidslimieten overschreden", + "edge-connection": "Edge-verbinding", + "edge-communication-failure": "Communicatiefout met edge", + "task-processing-failure": "Fout bij taakverwerking", + "resources-shortage": "Gebrek aan middelen", "trigger": "Trigger", "trigger-required": "Trigger is verplicht" }, @@ -4117,11 +4258,12 @@ "checksum-hint": "Als checksum leeg is, wordt deze automatisch gegenereerd", "checksum-algorithm": "Checksum-algoritme", "checksum-copied-message": "Pakket-checksum is gekopieerd naar het klembord", - "change-firmware": "Het wijzigen van de firmware kan een update van { count, plural, =1 {1 apparaat} other {# apparaten} } veroorzaken.", - "change-software": "Het wijzigen van de software kan een update van { count, plural, =1 {1 apparaat} other {# apparaten} } veroorzaken.", + "change-firmware": "Het wijzigen van de firmware kan leiden tot een update van { count, plural, =1 {1 apparaat} other {# apparaten} }.", + "change-software": "Het wijzigen van de software kan leiden tot een update van { count, plural, =1 {1 apparaat} other {# apparaten} }.", + "change-ota-setting-title": "Weet u zeker dat u de OTA-instellingen wilt wijzigen?", "chose-compatible-device-profile": "Het geüploade pakket is alleen beschikbaar voor apparaten met het gekozen profiel.", - "chose-firmware-distributed-device": "Kies firmware die wordt verspreid naar apparaten", - "chose-software-distributed-device": "Kies software die wordt verspreid naar apparaten", + "chose-firmware-distributed-device": "Kies de firmware die wordt verspreid naar de apparaten", + "chose-software-distributed-device": "Kies de software die wordt verspreid naar de apparaten", "content-type": "Inhoudstype", "copy-checksum": "Checksum kopiëren", "copy-direct-url": "Directe URL kopiëren", @@ -4314,8 +4456,9 @@ "add-relation-filter": "Relatiefilter toevoegen", "any-relation": "Elke relatie", "relation-filters": "Relatiefilters", + "relation-filter": "Relatiefilter", "additional-info": "Aanvullende info (JSON)", - "invalid-additional-info": "Kan aanvullende info JSON niet verwerken.", + "invalid-additional-info": "Kan aanvullende info JSON niet ontleden.", "no-relations-text": "Geen relaties gevonden", "not": "Niet" }, @@ -4354,15 +4497,21 @@ "jks": "JKS", "js-module": "JS-module", "lwm2m-model": "LWM2M-model", - "pkcs-12": "PKCS #12" + "pkcs-12": "PKCS #12", + "general": "Algemeen" }, "resource-sub-type": "Subtype", "sub-type": { "image": "afbeelding", - "scada-symbol": "Scada-symbool", + "scada-symbol": "SCADA-symbool", "extension": "Extensie", "module": "Module" - } + }, + "resource-is-in-use": "Resource wordt gebruikt door andere entiteiten", + "resources-are-in-use": "Resources worden gebruikt door andere entiteiten", + "resource-is-in-use-text": "De resource '{{title}}' is niet verwijderd omdat deze wordt gebruikt door de volgende entiteiten:", + "resources-are-in-use-text": "Niet alle resources zijn verwijderd omdat ze worden gebruikt door andere entiteiten.
U kunt de verwijzende entiteiten bekijken door op de knop Referenties in de overeenkomstige resource-rij te klikken.
Als u deze resources toch wilt verwijderen, selecteer ze dan in de onderstaande tabel en klik op de knop Selectie verwijderen.", + "delete-resource-in-use-text": "Als u de resource toch wilt verwijderen, klik dan op de knop Toch verwijderen." }, "javascript": { "add": "JavaScript-bron toevoegen", @@ -4902,8 +5051,8 @@ "credentials-anonymous": "Anoniem", "credentials-basic": "Basis", "credentials-pem": "PEM", - "credentials-pem-hint": "Minstens een Server CA-certificaatbestand of een paar Client-certificaat en Client privésleutelbestanden zijn vereist", - "credentials-sas": "Gedeelde Toegangshandtekening", + "credentials-pem-hint": "Minstens een Server CA-certificaatbestand of een paar Clientcertificaat en Client private key-bestanden zijn vereist", + "credentials-sas": "Gedeelde Toegangssleutel (SAS)", "sas-key": "SAS-sleutel", "sas-key-required": "SAS-sleutel is verplicht.", "hostname": "Hostnaam", @@ -4993,29 +5142,29 @@ "entity-details-phone": "Telefoon", "entity-details-email": "E-mail", "email-sender": "E-mailsender", - "fields-to-check": "Velden om te controleren", + "fields-to-check": "Te controleren velden", "add-detail": "Detail toevoegen", - "check-all-keys-tooltip": "Controleer of alle opgegeven velden aanwezig zijn in gegevens en metadata van het bericht.", - "fields-to-check-hint": "Druk op 'Enter' om veldnaam te voltooien. Meerdere namen ondersteund.", - "entity-details-list-empty": "Selecteer ten minste één detail.", + "check-all-keys-tooltip": "Indien ingeschakeld, wordt gecontroleerd of alle vermelde velden in de boodschap en de metagegevens aanwezig zijn.", + "fields-to-check-hint": "Druk op \"Enter\" om de invoer van veldnaam te voltooien. Meerdere veldnamen worden ondersteund.", + "entity-details-list-empty": "Minstens één detail moet geselecteerd zijn.", "alarm-status": "Alarmstatus", - "alarm-required": "Minstens één alarmstatus is vereist.", + "alarm-required": "Minstens één alarmstatus moet geselecteerd zijn.", "no-entity-details-matching": "Geen overeenkomende entiteitsdetails gevonden.", "custom-table-name": "Aangepaste tabelnaam", "custom-table-name-required": "Tabelnaam is verplicht", - "custom-table-hint": "Tabel moet bestaan in Cassandra-cluster en beginnen met 'cs_tb_'. Geef naam zonder prefix op.", + "custom-table-hint": "De tabel moet zijn aangemaakt in je Cassandra-cluster en de naam moet beginnen met het voorvoegsel 'cs_tb_' om te voorkomen dat gegevens in algemene TB-tabellen worden geschreven. Voer hier de tabelnaam in zonder het voorvoegsel 'cs_tb_'.", "message-field": "Berichtveld", "message-field-required": "Berichtveld is verplicht.", "table-col": "Tabelkolom", "table-col-required": "Tabelkolom is verplicht.", - "latitude-field-name": "Breedtegraadveldnaam", - "longitude-field-name": "Lengtegraadveldnaam", - "latitude-field-name-required": "Breedtegraadveldnaam is verplicht.", - "longitude-field-name-required": "Lengtegraadveldnaam is verplicht.", - "fetch-perimeter-info-from-metadata": "Perimeterinformatie uit metadata ophalen", - "fetch-perimeter-info-from-metadata-tooltip": "Bij 'Polygon' wordt waarde direct gebruikt. Bij 'Circle' worden velden 'latitude', 'longitude', 'radius' en 'radiusUnit' verwacht.", + "latitude-field-name": "Naam breedtegraadveld", + "longitude-field-name": "Naam lengtegraadveld", + "latitude-field-name-required": "Naam van breedtegraadveld is verplicht.", + "longitude-field-name-required": "Naam van lengtegraadveld is verplicht.", + "fetch-perimeter-info-from-metadata": "Perimeterinformatie ophalen uit metadata", + "fetch-perimeter-info-from-metadata-tooltip": "Als het perimetertype is ingesteld op 'Polygon', wordt de waarde van het metagegevensveld '{{perimeterKeyName}}' rechtstreeks gebruikt als perimetrische definitie. Als het perimetertype 'Circle' is, wordt deze waarde geparseerd om 'latitude', 'longitude', 'radius', en 'radiusUnit' te extraheren voor de definitie van de cirkelperimeter.", "perimeter-key-name": "Perimeter sleutelnaam", - "perimeter-key-name-hint": "Metadata veldnaam met perimeterinformatie.", + "perimeter-key-name-hint": "Naam van het metagegevensveld dat perimeterinformatie bevat.", "perimeter-key-name-required": "Perimeter sleutelnaam is verplicht.", "perimeter-circle": "Cirkel", "perimeter-polygon": "Polygoon", @@ -5035,19 +5184,19 @@ "range-required": "Bereik is verplicht.", "polygon-definition": "Polygoondefinitie", "polygon-definition-required": "Polygoondefinitie is verplicht.", - "polygon-definition-hint": "Gebruik formaat: [[lat1,lon1],[lat2,lon2],...,[latN,lonN]].", - "min-inside-duration": "Minimale binnentijdsduur", - "min-inside-duration-value-required": "Minimale binnentijdsduur is verplicht", - "min-inside-duration-time-unit": "Tijdseenheid minimale binnentijdsduur", - "min-outside-duration": "Minimale buitentijdsduur", - "min-outside-duration-value-required": "Minimale buitentijdsduur is verplicht", - "min-outside-duration-time-unit": "Tijdseenheid minimale buitentijdsduur", - "tell-failure-if-absent": "Meld mislukking", - "tell-failure-if-absent-hint": "Indien geselecteerd, genereert fout bij ontbrekende sleutelwaarden.", - "get-latest-value-with-ts": "Ophalen met tijdstempel", - "get-latest-value-with-ts-hint": "Geeft ook tijdstempel bij laatste telemetrie, bijv.: \"temp\": {\"ts\":1574329385897, \"value\":42}", - "ignore-null-strings": "Negeer lege strings", - "ignore-null-strings-hint": "Indien geselecteerd, worden lege waarden genegeerd.", + "polygon-definition-hint": "Gebruik het volgende formaat voor handmatige definitie van een polygoon: [[lat1,lon1],[lat2,lon2], ... ,[latN,lonN]].", + "min-inside-duration": "Minimale tijd binnen gebied", + "min-inside-duration-value-required": "Minimale tijd binnen gebied is verplicht", + "min-inside-duration-time-unit": "Tijdseenheid voor minimale tijd binnen gebied", + "min-outside-duration": "Minimale tijd buiten gebied", + "min-outside-duration-value-required": "Minimale tijd buiten gebied is verplicht", + "min-outside-duration-time-unit": "Tijdseenheid voor minimale tijd buiten gebied", + "tell-failure-if-absent": "Melding bij afwezigheid", + "tell-failure-if-absent-hint": "Indien ten minste één geselecteerde sleutel ontbreekt, rapporteert het uitgaande bericht \"Mislukt\".", + "get-latest-value-with-ts": "Tijdstempel ophalen voor laatste telemetriegegevens", + "get-latest-value-with-ts-hint": "Indien geselecteerd, bevatten de laatste telemetriegegevens ook een tijdstempel, bijvoorbeeld: \"temp\": \"{\"ts\":1574329385897, \"value\":42}\"", + "ignore-null-strings": "Negeer lege tekenreeksen", + "ignore-null-strings-hint": "Indien geselecteerd, negeert de regelnode entiteitsvelden met een lege waarde.", "add-metadata-key-values-as-kafka-headers": "Voeg metadata toe aan Kafka headers", "add-metadata-key-values-as-kafka-headers-hint": "Metadata key-value paren worden als byte arrays met charset toegevoegd.", "charset-encoding": "Tekenset codering", @@ -5058,44 +5207,44 @@ "charset-utf-16be": "UTF-16BE", "charset-utf-16le": "UTF-16LE", "charset-utf-16": "UTF-16", - "select-queue-hint": "De naam van de wachtrij kan uit de lijst gekozen worden of als aangepaste naam worden ingevoerd.", - "device-profile-node-hint": "Nuttig bij duur- of herhalingscondities om consistentie van alarmstatus te waarborgen.", - "persist-alarm-rules": "Alarmregelstatus opslaan", - "persist-alarm-rules-hint": "Indien ingeschakeld, slaat deze knooppunt de status van verwerking op in de database.", - "fetch-alarm-rules": "Haal alarmregelstatus op", - "fetch-alarm-rules-hint": "Herstelt status bij initialisatie, zodat alarmen na herstart blijven functioneren.", - "input-value-key": "Sleutel invoerwaarde", - "input-value-key-required": "Sleutel invoerwaarde is verplicht.", - "output-value-key": "Sleutel uitvoerwaarde", - "output-value-key-required": "Sleutel uitvoerwaarde is verplicht.", - "number-of-digits-after-floating-point": "Aantal decimalen na komma", - "number-of-digits-after-floating-point-range": "Moet tussen 0 en 15 liggen.", - "failure-if-delta-negative": "Foutmelding bij negatieve delta", - "failure-if-delta-negative-tooltip": "Veroorzaakt fout als delta negatief is.", - "use-caching": "Gebruik caching", - "use-caching-tooltip": "Cache waarde van \"{{inputValueKey}}\" voor betere prestaties.", - "add-time-difference-between-readings": "Voeg tijdsverschil toe tussen \"{{inputValueKey}}\" metingen", - "add-time-difference-between-readings-tooltip": "Voegt \"{{periodValueKey}}\" toe aan uitgaand bericht.", - "period-value-key": "Periode sleutel", - "period-value-key-required": "Periode sleutel is verplicht.", - "general-pattern-hint": "Gebruik ${metadataKey} voor metadata en $[messageKey] voor berichtgegevens.", - "alarm-severity-pattern-hint": "Gebruik ${metadataKey} voor de waarde uit de metadata, $[messageKey] voor de waarde uit de berichtinhoud. De alarmernst moet een systeemwaarde zijn (CRITICAL, MAJOR, enz.)", - "output-node-name-hint": "Naam van rule node is het relatietype dat berichten doorstuurt naar andere nodes.", - "use-server-ts": "Gebruik server tijdstempel", - "use-server-ts-hint": "Gebruik server tijdstempel bij ontbreken van expliciete tijd in gegevens.", - "kv-map-pattern-hint": "Alle invoervelden ondersteunen templates. Gebruik $[messageKey] of ${metadataKey}.", - "kv-map-single-pattern-hint": "Ondersteunt templates. Gebruik $[messageKey] of ${metadataKey}.", - "shared-scope": "Gedeeld bereik", - "server-scope": "Serverbereik", - "client-scope": "Clientbereik", + "select-queue-hint": "De wachtrijnaam kan worden geselecteerd via een keuzelijst of handmatig worden ingevoerd.", + "device-profile-node-hint": "Handig bij duur- of herhalingsvoorwaarden om continuïteit van alarmevaluatie te waarborgen.", + "persist-alarm-rules": "Status van alarmregels opslaan", + "persist-alarm-rules-hint": "Indien ingeschakeld, slaat de regelnode de verwerkingsstatus op in de database.", + "fetch-alarm-rules": "Status van alarmregels ophalen", + "fetch-alarm-rules-hint": "Indien ingeschakeld, herstelt de regelnode de verwerkingsstatus bij initialisatie en zorgt ervoor dat alarmen ook na serverherstart worden geactiveerd. Anders wordt de status hersteld wanneer het eerste bericht van het apparaat binnenkomt.", + "input-value-key": "Invoerwaarde-sleutel", + "input-value-key-required": "Invoerwaarde-sleutel is verplicht.", + "output-value-key": "Uitvoerwaarde-sleutel", + "output-value-key-required": "Uitvoerwaarde-sleutel is verplicht.", + "number-of-digits-after-floating-point": "Aantal cijfers na de komma", + "number-of-digits-after-floating-point-range": "Aantal cijfers na de komma moet tussen 0 en 15 liggen.", + "failure-if-delta-negative": "Melding bij negatieve delta", + "failure-if-delta-negative-tooltip": "De regelnode dwingt een verwerkingsfout af als de deltawaarde negatief is.", + "use-caching": "Caching gebruiken", + "use-caching-tooltip": "De regel‑node cacheert de waarde van \"{{inputValueKey}}\" die binnenkomt via het inkomende bericht om de prestaties te verbeteren. Houd er rekening mee dat de cache niet wordt bijgewerkt als u de waarde van \"{{inputValueKey}}\" elders wijzigt.", + "add-time-difference-between-readings": "Tijdsverschil toevoegen tussen \"{{inputValueKey}}\" metingen", + "add-time-difference-between-readings-tooltip": "Indien ingeschakeld, voegt de regel‑node de \"{{periodValueKey}}\" toe aan het uitgaande bericht.", + "period-value-key": "Sleutel voor periode‑waarde", + "period-value-key-required": "Sleutel voor periode‑waarde is verplicht.", + "general-pattern-hint": "Gebruik ${metadataKey} voor waarden uit metadata, $[messageKey] voor waarden uit het berichtlichaam.", + "alarm-severity-pattern-hint": "Gebruik ${metadataKey} voor een waarde uit metadata, en $[messageKey] voor een waarde uit het berichtlichaam. De alarmernst moet een systeemniveau zijn (CRITICAL, MAJOR, enz.).", + "output-node-name-hint": "De regel‑node‑naam komt overeen met het relatietype van het uitgaande bericht, en wordt gebruikt om berichten door te sturen naar andere regel‑nodes in de oproepende regelketen.", + "use-server-ts": "Gebruik de tijdstempel van de server", + "use-server-ts-hint": "Gebruik de huidige tijdstempel van de server voor tijdreeksgegevens die geen expliciete tijdstempel bevatten. Dit helpt om de juiste volgorde te behouden wanneer berichten uit meerdere bronnen komen of buiten volgorde binnenkomen.", + "kv-map-pattern-hint": "Alle invoervelden ondersteunen templatisering. Gebruik $[messageKey] om een waarde uit het bericht te halen en ${metadataKey} om een waarde uit de metadata te halen.", + "kv-map-single-pattern-hint": "Invoerveld ondersteunt templatisering. Gebruik $[messageKey] voor een waarde uit het bericht en ${metadataKey} voor een waarde uit de metadata.", + "shared-scope": "Gedeelde scope", + "server-scope": "Server‑scope", + "client-scope": "Client‑scope", "attribute-type": "Attribuut", - "attribute-type-description": "Waarde uit database ophalen", - "attribute-type-result-description": "Resultaat opslaan als attribuut", + "attribute-type-description": "Haal attribuutwaarde op uit de database", + "attribute-type-result-description": "Sla resultaat op als entiteitsattribuut in de database", "constant-type": "Constante", - "constant-type-description": "Stel vaste waarde in", + "constant-type-description": "Definieer een constante waarde", "time-series-type": "Tijdreeks", - "time-series-type-description": "Laatste tijdreekswaarde ophalen", - "time-series-type-result-description": "Resultaat opslaan als tijdreeks", + "time-series-type-description": "Haal de laatste tijdreekswaarde op uit de database", + "time-series-type-result-description": "Sla het resultaat op als een entiteits‑tijdreeks in de database", "message-body-type": "Bericht", "message-body-type-description": "Waarde uit bericht ophalen", "message-body-type-result-description": "Resultaat toevoegen aan bericht", @@ -5113,8 +5262,8 @@ "argument-key-field-input-required": "Sleutel is verplicht.", "constant-value-field-input": "Constante waarde", "constant-value-field-input-required": "Constante waarde is verplicht.", - "attribute-scope-field-input": "Attribuutbereik", - "attribute-scope-field-input-required": "Attribuutbereik is verplicht.", + "attribute-scope-field-input": "Attribuutscope", + "attribute-scope-field-input-required": "Attribuutscope is verplicht.", "default-value-field-input": "Standaardwaarde", "type-field-input": "Type", "type-field-input-required": "Type is verplicht.", @@ -5167,19 +5316,19 @@ "first-name": "Voornaam", "last-name": "Achternaam", "label": "Label", - "originator-fields-mapping": "Bronveld-mapping", - "add-mapped-originator-fields-to": "Voeg gemapte bronvelden toe aan", + "originator-fields-mapping": "Toewijzing oorsprongsvelden", + "add-mapped-originator-fields-to": "Toegevoegde oorsprongsvelden plaatsen in", "fields": "Velden", "skip-empty-fields": "Lege velden overslaan", - "skip-empty-fields-tooltip": "Velden zonder waarde worden niet toegevoegd aan bericht of metadata.", - "fetch-interval": "Ophaalinterval", + "skip-empty-fields-tooltip": "Velden met lege waarden worden niet toegevoegd aan het uitgaande bericht/uitgaande metadata.", + "fetch-interval": "Ophaalfrequentie", "fetch-strategy": "Ophaalstrategie", - "fetch-timeseries-from-to": "Ophaal tijdreeks van {{startInterval}} {{startIntervalTimeUnit}} geleden tot {{endInterval}} {{endIntervalTimeUnit}} geleden.", - "fetch-timeseries-from-to-invalid": "\"Interval start\" moet kleiner zijn dan \"Interval einde\".", - "use-metadata-dynamic-interval-tooltip": "Gebruikt dynamisch interval op basis van bericht/metadata.", - "all-mode-hint": "Met 'All' worden alle tijdreeksen binnen het interval opgehaald.", - "first-mode-hint": "'First' haalt dichtstbijzijnde tijdreeks op bij start van interval.", - "last-mode-hint": "'Last' haalt dichtstbijzijnde tijdreeks op bij einde van interval.", + "fetch-timeseries-from-to": "Haal tijdreeksen op van {{startInterval}} {{startIntervalTimeUnit}} geleden tot {{endInterval}} {{endIntervalTimeUnit}} geleden.", + "fetch-timeseries-from-to-invalid": "Ophalen tijdreeksen ongeldig (\"Intervalstart\" moet kleiner zijn dan \"Intervaleind\").", + "use-metadata-dynamic-interval-tooltip": "Indien geselecteerd zal de regel‑node dynamische intervalstart en eind gebruiken op basis van berichten- en metadata‑patronen.", + "all-mode-hint": "Indien de ophaalmodus \"Alle\" is geselecteerd, haalt de regel‑node telemetrie op binnen het ophaalinterval met configureerbare query‑parameters.", + "first-mode-hint": "Indien de ophaalmodus \"Eerste\" is geselecteerd, haalt de regel‑node de dichtstbijzijnde telemetrie op ten opzichte van het begin van het ophaalinterval.", + "last-mode-hint": "Indien de ophaalmodus \"Laatste\" is geselecteerd, haalt de regel‑node de dichtstbijzijnde telemetrie op ten opzichte van het einde van het ophaalinterval.", "ascending": "Oplopend", "descending": "Aflopend", "min": "Min", @@ -5188,45 +5337,45 @@ "sum": "Som", "count": "Aantal", "none": "Geen", - "last-level-relation-tooltip": "Zoekt alleen gerelateerde entiteiten op laatste niveau.", - "last-level-device-relation-tooltip": "Zoekt alleen gerelateerde apparaten op laatste niveau.", - "data-to-fetch": "Gegevens op te halen", - "mapping-of-customers": "Mapping van klant", - "map-fields-required": "Alle mapping-velden zijn verplicht.", + "last-level-relation-tooltip": "Als geselecteerd, zoekt de regel‑node gerelateerde entiteiten alleen op het niveau dat is ingesteld in de parameter 'max relation level'.", + "last-level-device-relation-tooltip": "Als geselecteerd, zoekt de regel‑node gerelateerde apparaten alleen op het niveau dat is ingesteld in de parameter 'max relation level'.", + "data-to-fetch": "Op te halen gegevens", + "mapping-of-customers": "Mapping van klanten", + "map-fields-required": "Alle mapping‑velden zijn verplicht.", "attributes": "Attributen", - "related-device-attributes": "Gerelateerde apparaat attributen", - "add-selected-attributes-to": "Voeg geselecteerde attributen toe aan", + "related-device-attributes": "Gerelateerde apparaatattributen", + "add-selected-attributes-to": "Geselecteerde attributen toevoegen aan", "device-profiles": "Apparaatprofielen", - "mapping-of-tenant": "Mapping van huurder", + "mapping-of-tenant": "Mapping van tenant", "add-attribute-key": "Attribuutsleutel toevoegen", "message-template": "Berichtsjabloon", "message-template-required": "Berichtsjabloon is verplicht", - "use-system-slack-settings": "Gebruik systeem Slack-instellingen", - "slack-api-token": "Slack API-token", - "slack-api-token-required": "Slack API-token is verplicht", + "use-system-slack-settings": "Systeem‑Slack‑instellingen gebruiken", + "slack-api-token": "Slack API‑token", + "slack-api-token-required": "Slack API‑token is verplicht", "keys-mapping": "Sleutelmapping", - "add-key": "Sleutel toevoegen", + "add-key": "Voeg sleutel toe", "recipients": "Ontvangers", - "message-subject-and-content": "Onderwerp en inhoud van bericht", - "template-rules-hint": "Gebruik $[messageKey] of ${metadataKey} om waarden te extraheren.", - "originator-customer-desc": "Gebruik klant van oorspronkelijke bron als nieuwe bron.", - "originator-tenant-desc": "Gebruik huidige huurder als nieuwe bron.", - "originator-related-entity-desc": "Gebruik gerelateerde entiteit als nieuwe bron.", - "originator-alarm-originator-desc": "Gebruik alarmbron als nieuwe bron.", - "originator-entity-by-name-pattern-desc": "Zoek entiteit op naam en gebruik als nieuwe bron.", - "email-from-template-hint": "Gebruik $[messageKey] of ${metadataKey} om waarden op te halen.", - "recipients-block-main-hint": "Komma-gescheiden lijst, ondersteunt templates.", - "forward-msg-default-rule-chain": "Stuur bericht naar standaard regelketen van bron", - "forward-msg-default-rule-chain-tooltip": "Gebruikt standaard of geconfigureerde regelketen van bron.", - "exclude-zero-deltas": "Negeer nulverschillen", - "exclude-zero-deltas-hint": "Voegt sleutel toe aan bericht indien waarde niet nul is.", - "exclude-zero-deltas-time-difference-hint": "Voegt alleen toe als waarde niet nul is.", - "search-direction-from": "Van bron naar doelentiteit", - "search-direction-to": "Van doelentiteit naar bron", - "del-relation-direction-from": "Van bron", - "del-relation-direction-to": "Naar bron", + "message-subject-and-content": "Onderwerp en inhoud bericht", + "template-rules-hint": "Beide invoervelden ondersteunen templatisering. Gebruik $[messageKey] om een waarde uit het bericht te halen en ${metadataKey} om een waarde uit de metadata te halen.", + "originator-customer-desc": "Gebruik klant van de binnenkomende bericht‑afzender als nieuwe afzender.", + "originator-tenant-desc": "Gebruik huidige tenant als nieuwe afzender.", + "originator-related-entity-desc": "Gebruik de gerelateerde entiteit als nieuwe afzender. Lookup op basis van geconfigureerd relatietype en richting.", + "originator-alarm-originator-desc": "Gebruik de alarm‑afzender als nieuwe afzender. Alleen indien de binnenkomende bericht‑afzender een alarm‑entiteit is.", + "originator-entity-by-name-pattern-desc": "Gebruik entiteit opgehaald uit DB als nieuwe afzender. Lookup op basis van entiteitstype en opgegeven naam‑patroon.", + "email-from-template-hint": "Gebruik $[messageKey] om een waarde uit het bericht te halen en ${metadataKey} om een waarde uit de metadata te halen.", + "recipients-block-main-hint": "Komma‑gescheiden adressenlijst. Alle invoervelden ondersteunen templatisering. Gebruik $[messageKey] voor waarde uit het bericht en ${metadataKey} voor waarde uit de metadata.", + "forward-msg-default-rule-chain": "Stuur bericht door naar de standaard regelketen van de afzender", + "forward-msg-default-rule-chain-tooltip": "Indien ingeschakeld wordt het bericht doorgestuurd naar de standaard regelketen van de afzender, of naar de regelketen uit de configuratie. Als de afzender geen standaard regelketen heeft gedefinieerd in het entiteitprofiel.", + "exclude-zero-deltas": "Sluit nul‑delta’s uit van het uitgaande bericht", + "exclude-zero-deltas-hint": "Indien ingeschakeld zal de output‑sleutel \"{{outputValueKey}}\" aan het uitgaande bericht worden toegevoegd **als** de waarde **niet** nul is.", + "exclude-zero-deltas-time-difference-hint": "Indien ingeschakeld zullen de output‑sleutels \"{{outputValueKey}}\" en \"{{periodValueKey}}\" alleen aan het uitgaande bericht worden toegevoegd **als** de waarde van \"{{outputValueKey}}\" niet nul is.", + "search-direction-from": "Van afzender naar doel‑entiteit", + "search-direction-to": "Van doel‑entiteit naar afzender", + "del-relation-direction-from": "Van afzender", + "del-relation-direction-to": "Naar afzender", "target-entity": "Doelentiteit", - "function-configuration": "Functieconfiguratie", + "function-configuration": "Functie‑configuratie", "function-name": "Functienaam", "function-name-required": "Functienaam is verplicht.", "qualifier": "Kwalificatie", @@ -5304,6 +5453,37 @@ "html-text-description": "Gebruik HTML-tags voor opmaak, links en afbeeldingen.", "dynamic-text-description": "Gebruik dynamisch platte tekst of HTML via sjabloon.", "after-template-evaluation-hint": "Na sjabloonevaluatie: true voor HTML, false voor platte tekst." + }, + "ai": { + "ai-model": "AI‑model", + "model": "Model", + "ai-model-hint": "Selecteer het vooraf geconfigureerde AI‑model voor verwerking van verzoeken door deze regel‑node, of gebruik \"Create new\" om een nieuw model te configureren.", + "prompt-settings": "Prompt‑instellingen", + "prompt-settings-hint": "De optionele system prompt bepaalt de algemene rol en beperkingen van de AI, terwijl de user prompt de specifieke taak beschrijft. Beide velden ondersteunen ook templatisering.", + "system-prompt": "System prompt", + "system-prompt-max-length": "System prompt mag maximaal 500000 tekens bevatten.", + "system-prompt-blank": "System prompt mag niet leeg zijn.", + "user-prompt": "User prompt", + "user-prompt-required": "User prompt is verplicht.", + "user-prompt-max-length": "User prompt mag maximaal 500000 tekens bevatten.", + "user-prompt-blank": "User prompt mag niet leeg zijn.", + "response-format": "Antwoordformaat", + "response-text": "Tekst", + "response-json": "JSON", + "response-json-schema": "JSON‑schema", + "response-format-hint-TEXT": "Staat het model toe willekeurige tekst te genereren, wat **niet** per se een geldig JSON‑object hoeft te zijn. Indien dit geen geldig JSON‑object is, wordt het automatisch ingepakt in een JSON‑object onder de sleutel \"response\".", + "response-format-hint-JSON": "Het model moet een geldig JSON‑object genereren. Indien dit geen geldig JSON‑object is, wordt het automatisch ingepakt in een JSON‑object onder de sleutel \"response\".", + "response-format-hint-JSON_SCHEMA": "Het model moet een JSON genereren die overeenkomt met de gespecificeerde structuur en datatypes van het opgegeven schema. Indien dit geen geldig JSON‑object is, wordt het automatisch ingepakt in een JSON‑object onder de sleutel \"response\".", + "response-json-schema-hint": "Hoewel elk geldig JSON‑schema kan worden ingevoerd, ondersteunt deze regel‑node slechts een beperkte subset van de functies. Zie de documentatie van de node voor details.", + "response-json-schema-required": "JSON‑schema is verplicht", + "advanced-settings": "Geavanceerde instellingen", + "timeout": "Timeout", + "timeout-hint": "Maximale tijd om te wachten op een antwoord \nvan het AI‑model voordat het verzoek wordt beëindigd.", + "timeout-required": "Timeout is verplicht", + "timeout-validation": "Moet tussen 1 seconde en 10 minuten zijn.", + "force-acknowledgement": "Verplicht bevestigen", + "force-acknowledgement-hint": "Indien ingeschakeld, wordt het inkomende bericht direct bevestigd. Het ant­woord van het model wordt dan in de wachtrij geplaatst als een afzonderlijk, nieuw bericht.", + "ai-resources": "AI‑resources" } }, "timezone": { @@ -5625,7 +5805,10 @@ "too-small-value-zero": "De waarde moet groter zijn dan 0", "too-small-value-one": "De waarde moet groter zijn dan 1", "queue-size-is-limited-by-system-configuration": "De grootte van de wachtrij is ook beperkt door de systeemconfiguratie.", - "cassandra-tenant-limits-configuration": "Cassandra-query voor tenant", + "cassandra-write-tenant-core-limits-configuration": "Cassandra schrijfqueries via REST API", + "cassandra-read-tenant-core-limits-configuration": "Cassandra leesqueries voor telemetrie via REST API en WS", + "cassandra-write-tenant-rule-engine-limits-configuration": "Cassandra schrijfqueries voor telemetrie via Rule Engine", + "cassandra-read-tenant-rule-engine-limits-configuration": "Cassandra leesqueries voor telemetrie via Rule Engine", "ws-limit-max-sessions-per-tenant": "Maximaal aantal sessies per tenant", "ws-limit-max-sessions-per-customer": "Maximaal aantal sessies per klant", "ws-limit-max-sessions-per-regular-user": "Maximaal aantal sessies per reguliere gebruiker", @@ -5638,27 +5821,30 @@ "ws-limit-updates-per-session": "WS-updates per sessie", "rate-limits": { "add-limit": "Limiet toevoegen", + "and-also-less-than": "en ook minder dan", "advanced-settings": "Geavanceerde instellingen", "edit-limit": "Limiet bewerken", - "but-less-than": "maar minder dan", "calculated-field-debug-event-rate-limit": "Debuggebeurtenissen van berekende velden", - "edit-calculated-field-debug-event-rate-limit": "Bewerk rate-limieten voor debuggebeurtenissen van berekende velden", - "edit-transport-tenant-msg-title": "Bewerk rate-limieten voor tenanttransportberichten", - "edit-transport-tenant-telemetry-msg-title": "Bewerk rate-limieten voor tenanttelemetrieberichten", - "edit-transport-tenant-telemetry-data-points-title": "Bewerk rate-limieten voor tenant telemetriegegevenspunten", - "edit-transport-device-msg-title": "Bewerk rate-limieten voor apparaatberichten", - "edit-transport-device-telemetry-msg-title": "Bewerk rate-limieten voor apparaattelmetrieberichten", - "edit-transport-device-telemetry-data-points-title": "Bewerk rate-limieten voor apparaattelmetriegegevenspunten", - "edit-transport-gateway-msg-title": "Bewerk rate-limieten voor gatewayberichten", - "edit-transport-gateway-telemetry-msg-title": "Bewerk rate-limieten voor gatewaytelemetrieberichten", - "edit-transport-gateway-telemetry-data-points-title": "Bewerk rate-limieten voor gatewaytelemetriegegevenspunten", - "edit-transport-gateway-device-msg-title": "Bewerk rate-limieten voor gatewayapparaatberichten", - "edit-transport-gateway-device-telemetry-msg-title": "Bewerk rate-limieten voor gatewayapparaattelemetrieberichten", - "edit-transport-gateway-device-telemetry-data-points-title": "Bewerk rate-limieten voor gatewayapparaattelemetriegegevenspunten", - "edit-tenant-rest-limits-title": "Bewerk REST-verzoeken voor tenant", - "edit-customer-rest-limits-title": "Bewerk REST-verzoeken voor klant", - "edit-ws-limit-updates-per-session-title": "Bewerk WS-updates per sessie", - "edit-cassandra-tenant-limits-configuration-title": "Bewerk Cassandra-query voor tenant", + "edit-calculated-field-debug-event-rate-limit": "Beperkingen voor debuggebeurtenissen van berekende velden bewerken", + "edit-transport-tenant-msg-title": "Beperkingen voor transporttenantberichten bewerken", + "edit-transport-tenant-telemetry-msg-title": "Beperkingen voor transporttenanttelemetrieberichten bewerken", + "edit-transport-tenant-telemetry-data-points-title": "Beperkingen voor datapoints van transporttenanttelemetrie bewerken", + "edit-transport-device-msg-title": "Beperkingen voor transportapparaatberichten bewerken", + "edit-transport-device-telemetry-msg-title": "Beperkingen voor transportapparaattelemetrieberichten bewerken", + "edit-transport-device-telemetry-data-points-title": "Beperkingen voor datapoints van transportapparaattelemetrie bewerken", + "edit-transport-gateway-msg-title": "Beperkingen voor transportgatewayberichten bewerken", + "edit-transport-gateway-telemetry-msg-title": "Beperkingen voor transportgatewaytelemetrieberichten bewerken", + "edit-transport-gateway-telemetry-data-points-title": "Beperkingen voor datapoints van transportgatewaytelemetrie bewerken", + "edit-transport-gateway-device-msg-title": "Beperkingen voor transportgatewayapparaatberichten bewerken", + "edit-transport-gateway-device-telemetry-msg-title": "Beperkingen voor transportgatewayapparaattelemetrieberichten bewerken", + "edit-transport-gateway-device-telemetry-data-points-title": "Beperkingen voor datapoints van transportgatewayapparaattelemetrie bewerken", + "edit-tenant-rest-limits-title": "Beperkingen voor REST-verzoeken van tenant bewerken", + "edit-customer-rest-limits-title": "Beperkingen voor REST-verzoeken van klant bewerken", + "edit-ws-limit-updates-per-session-title": "Beperkingen voor WS-updates per sessie bewerken", + "edit-cassandra-write-tenant-core-limits-configuration": "Cassandra schrijfqueries voor REST API bewerken", + "edit-cassandra-read-tenant-core-limits-configuration": "Cassandra leesqueries voor REST API en WS-telemetrie bewerken", + "edit-cassandra-write-tenant-rule-engine-limits-configuration": "Cassandra schrijfqueries voor Rule Engine-telemetrie bewerken", + "edit-cassandra-read-tenant-rule-engine-limits-configuration": "Cassandra leesqueries voor Rule Engine-telemetrie bewerken", "edit-tenant-entity-export-rate-limit-title": "Bewerk rate-limieten voor entiteitsversie-aanmaak", "edit-tenant-entity-import-rate-limit-title": "Bewerk rate-limieten voor entiteitsversielading", "edit-tenant-notification-request-rate-limit-title": "Bewerk rate-limieten voor meldingsverzoeken", @@ -5680,6 +5866,7 @@ "per-seconds": "Per seconden", "per-seconds-required": "Tijdslimiet is verplicht.", "per-seconds-min": "Minimale waarde is 1.", + "per-seconds-duplicate": "Dubbele tijdsinterval. Elk tijdsinterval moet uniek zijn.", "rate-limits": "Rate-limieten", "remove-limit": "Limiet verwijderen", "transport-tenant-msg": "Transport tenantberichten", @@ -5769,11 +5956,11 @@ "sec": "{{ sec }} sec", "sec-short": "{{ sec }}s", "short": { - "years": "{ years, plural, =1 {1 jaar } other {# jaren } }", + "years": "{ years, plural, =1 {1 jaar } other {# jaar } }", "days": "{ days, plural, =1 {1 dag } other {# dagen } }", - "hours": "{ hours, plural, =1 {1 uur } other {# uren } }", - "minutes": "{{minutes}} min", - "seconds": "{{seconds}} sec" + "hours": "{ hours, plural, =1 {1 uur } other {# uur } }", + "minutes": "{{minutes}} min ", + "seconds": "{{seconds}} sec " }, "realtime": "Realtime", "history": "Geschiedenis", @@ -5826,38 +6013,152 @@ "label": "Label", "value": "Waarde", "date": "Datum", - "show-date-time-interval": "Toon datum-tijdinterval", - "show-date-time-interval-hint": "Toon datum-tijdinterval volgens de gegevensaggregatie.", + "show-date-time-interval": "Datumtijdinterval weergeven", + "show-date-time-interval-hint": "Toon datumtijdinterval volgens de gegevensaggregatie.", + "hide-zero-tooltip-values": "Verberg nulwaarden", + "show-stack-total": "Totale waarde weergeven in stapelmodus", "background-color": "Achtergrondkleur", "background-blur": "Achtergrondvervaging" }, "unit": { + "set-unit-conversion": "Eenheidsconversie instellen", + "unit-settings": { + "unit-settings": "Eenheidsinstellingen", + "source-unit": "Bron-eenheid", + "source-unit-hint": "Dit is de eenheid van de opgeslagen waarde. De eenheid waarvan je converteert. Voer het symbool in dat je brongegevens gebruiken (bijv. m, km, ft, in).", + "target-metric-unit": "Doel-metrische eenheid", + "target-metric-unit-hint": "Kies in welke metrische eenheid (SI) je de bronwaarde wilt converteren (bijv. cm, mm, km).", + "target-imperial-unit": "Doel-imperiale eenheid", + "target-imperial-unit-hint": "Kies in welke imperiale eenheid je de bronwaarde wilt converteren (bijv. in, ft, yd).", + "target-hybrid-unit": "Doel-hybride eenheid", + "target-hybrid-unit-hint": "Kies in welke hybride eenheid je de bronwaarde wilt converteren (bijv. cm, in, km). Hybride eenheden combineren metrische of imperiale eenheden.", + "enable-unit-conversion": "Eenheidsconversie inschakelen", + "enable-unit-conversion-hint": "Zet aan om conversie te activeren. Wanneer uitgeschakeld, wordt de bronwaarde ongewijzigd doorgegeven. Uitgeschakeld indien er slechts één eenheid bestaat in de betreffende meetgroep (bijv. Lichtstroom, AQI)." + }, + "unit-system": "Eenheidssysteem", + "unit-system-type": { + "AUTO": "Auto", + "METRIC": "Metrisch", + "IMPERIAL": "Imperiaal", + "HYBRID": "Hybride" + }, + "measures": { + "absorbed-dose-rate": "Geabsorbeerde dosis per tijdseenheid", + "acceleration": "Versnelling", + "acidity": "Zuurtegraad", + "air-quality-index": "Luchtkwaliteitsindex", + "amount-of-substance": "Hoeveelheid stof", + "angle": "Hoek", + "angular-acceleration": "Hoeksversnelling", + "area": "Oppervlakte", + "area-density": "Oppervlaktedichtheid", + "capacitance": "Capaciteit", + "catalytic-activity": "Katalytische activiteit", + "catalytic-concentration": "Katalytische concentratie", + "charge": "Lading", + "current-density": "Stroomdichtheid", + "data-transfer-rate": "Gegevensoverdrachtsnelheid", + "density": "Dichtheid", + "digital": "Digitaal", + "dimension-ratio": "Afmetingsverhouding", + "dynamic-viscosity": "Dynamische viscositeit", + "earthquake-magnitude": "Aardbevingskracht", + "electric-charge-density": "Elektrische ladingsdichtheid", + "electric-current": "Elektrische stroom", + "electric-dipole-moment": "Elektrisch dipoolmoment", + "electric-field-strength": "Sterkte van het elektrisch veld", + "electric-flux": "Elektrische flux", + "electric-permittivity": "Elektrische permittiviteit", + "electric-polarizability": "Elektrische polariseerbaarheid", + "electrical-conductance": "Elektrische conductantie", + "electrical-conductivity": "Elektrische geleidbaarheid", + "energy": "Energie", + "energy-density": "Energiedichtheid", + "force": "Kracht", + "frequency": "Frequentie", + "fuel-efficiency": "Brandstofefficiëntie", + "heat-capacity": "Warmtecapaciteit", + "illuminance": "Verlichtingssterkte", + "inductance": "Inductantie", + "kinematic-viscosity": "Kinematische viscositeit", + "length": "Lengte", + "light-exposure": "Lichtblootstelling", + "linear-charge-density": "Lineaire ladingsdichtheid", + "logarithmic-ratio": "Logaritmische verhouding", + "luminous-efficacy": "Lichtopbrengst", + "luminous-flux": "Lichtstroom", + "luminous-intensity": "Lichtsterkte", + "magnetic-field-gradient": "Magnetisch veldgradiënt", + "magnetic-flux": "Magnetische flux", + "magnetic-flux-density": "Magnetische fluxdichtheid", + "magnetic-moment": "Magnetisch moment", + "magnetic-permeability": "Magnetische permeabiliteit", + "mass": "Massa", + "mass-fraction": "Massafractie", + "molar-concentration": "Molconcentratie", + "molar-energy": "Molaire energie", + "molar-heat-capacity": "Molaire warmtecapaciteit", + "molar-mass": "Molmassa", + "number-concentration": "Aantalconcentratie", + "parts-per-million": "Deeltjes per miljoen", + "power": "Vermogen", + "power-density": "Vermogensdichtheid", + "pressure": "Druk", + "radiance": "Stralingsintensiteit", + "radiant-intensity": "Stralingssterkte", + "radiation-dose": "Stralingsdosis", + "radioactive-decay": "Radioactief verval", + "radioactivity": "Radioactiviteit", + "radioactivity-concentration": "Radioactiviteitsconcentratie", + "reciprocal-length": "Reciproque lengte", + "resistance": "Weerstand", + "reynolds-number": "Reynoldsgetal", + "signal-level": "Signaalniveau", + "solid-angle": "Ruimtehoek", + "specific-energy": "Specifieke energie", + "specific-heat-capacity": "Soortelijke warmtecapaciteit", + "specific-humidity": "Specifieke luchtvochtigheid", + "specific-volume": "Specifiek volume", + "speed": "Snelheid", + "surface-charge-density": "Oppervlakteladingsdichtheid", + "surface-tension": "Oppervlaktespanning", + "temperature": "Temperatuur", + "thermal-conductivity": "Thermische geleidbaarheid", + "time": "Tijd", + "torque": "Koppel", + "turbidity": "Troebelheid", + "voltage": "Spanning", + "volume": "Volume", + "volume-flow": "Volumestroom" + }, "millimeter": "Millimeter", "centimeter": "Centimeter", - "angstrom": "Angström", + "decimeter": "Decimeter", + "angstrom": "Ångström", "nanometer": "Nanometer", "micrometer": "Micrometer", "meter": "Meter", "kilometer": "Kilometer", "inch": "Inch", "foot": "Voet", + "foot-us": "Voet (VS-metingsysteem)", "yard": "Yard", "mile": "Mijl", "nautical-mile": "Zeemijl", "astronomical-unit": "Astronomische eenheid", - "reciprocal-metre": "Reciproque meter", + "reciprocal-metre": "Reciproke meter", "meter-per-meter": "Meter per meter", "steradian": "Steradiaal", - "thou": "Duizendste inch", + "thou": "Duizendste inch (Thou)", "barleycorn": "Barleycorn", "hand": "Hand", - "chain": "Ketting", + "chain": "Kettting", "furlong": "Furlong", "league": "League", "fathom": "Vadem", "cable": "Kabel", - "link": "Schakel", - "rod": "Roede", + "link": "Link", + "rod": "Staaf", "nanogram": "Nanogram", "microgram": "Microgram", "milligram": "Milligram", @@ -5887,6 +6188,7 @@ "cubic-foot": "Kubieke voet", "cubic-yard": "Kubieke yard", "fluid-ounce": "Fluid ounce", + "fluid-ounce-per-second": "Fluid ounce per seconde", "pint": "Pint", "quart": "Quart", "gallon": "Gallon", @@ -5905,9 +6207,13 @@ "meter-per-second": "Meter per seconde", "kilometer-per-hour": "Kilometer per uur", "foot-per-second": "Voet per seconde", + "foot-per-minute": "Voet per minuut", "mile-per-hour": "Mijl per uur", "knot": "Knoop", + "inch-per-second": "Inch per seconde", + "inch-per-hour": "Inch per uur", "millimeters-per-minute": "Millimeter per minuut", + "meter-per-minute": "Meter per minuut", "kilometer-per-hour-squared": "Kilometer per uur kwadraat", "foot-per-second-squared": "Voet per seconde kwadraat", "pascal": "Pascal", @@ -5922,8 +6228,9 @@ "foot-pounds": "Voet-pond", "inch-pounds": "Inch-pond", "newton-per-meter": "Newton per meter", - "atmospheres": "Atmospferen", - "pounds-per-square-inch": "Ponden per vierkante inch", + "atmospheres": "Atmosferen", + "pounds-per-square-inch": "Pond per vierkante inch", + "kilopound-per-square-inch": "Kilopond per vierkante inch", "torr": "Torr", "inches-of-mercury": "Inches kwik", "pascal-per-square-meter": "Pascal per vierkante meter", @@ -5941,18 +6248,24 @@ "megajoule": "Megajoule", "gigajoule": "Gigajoule", "watt-hour": "Wattuur", + "watt-minute": "Wattminuut", "kilowatt-hour": "Kilowattuur", + "milliwatt-hour": "Milliwattuur", + "megawatt-hour": "Megawattuur", + "gigawatt-hour": "Gigawattuur", "electron-volts": "Elektronvolt", - "joules-per-coulomb": "Joules per coulomb", + "joules-per-coulomb": "Joule per coulomb", "british-thermal-unit": "Britse thermische eenheid", + "thousand-british-thermal-unit": "Duizend Britse thermische eenheden", + "million-british-thermal-unit": "Miljoen Britse thermische eenheden", "foot-pound": "Voet-pond", "calorie": "Calorie", "small-calorie": "Kleine calorie", "kilocalorie": "Kilocalorie", - "joule-per-kelvin": "Joule per Kelvin", - "joule-per-kilogram-kelvin": "Joule per kilogram-Kelvin", + "joule-per-kelvin": "Joule per kelvin", + "joule-per-kilogram-kelvin": "Joule per kilogram-kelvin", "joule-per-kilogram": "Joule per kilogram", - "watt-per-meter-kelvin": "Watt per meter-Kelvin", + "watt-per-meter-kelvin": "Watt per meter-kelvin", "joule-per-cubic-meter": "Joule per kubieke meter", "therm": "Therm", "electric-dipole-moment": "Elektrisch dipoolmoment", @@ -5965,7 +6278,7 @@ "kilowatt": "Kilowatt", "megawatt": "Megawatt", "gigawatt": "Gigawatt", - "metric-horsepower": "Metrisch paardekracht", + "metric-horsepower": "Metrische paardekracht", "milliwatt-per-square-centimeter": "Milliwatt per vierkante centimeter", "watt-per-square-centimeter": "Watt per vierkante centimeter", "kilowatt-per-square-centimeter": "Kilowatt per vierkante centimeter", @@ -5974,11 +6287,21 @@ "kilowatt-per-square-meter": "Kilowatt per vierkante meter", "watt-per-square-inch": "Watt per vierkante inch", "kilowatt-per-square-inch": "Kilowatt per vierkante inch", - "horsepower": "Paardenkracht", - "btu-per-hour": "BTU per uur", + "horsepower": "Paardekracht", + "btu-per-hour": "Britse thermische eenheden per uur", + "btu-per-second": "Britse thermische eenheden per seconde", + "btu-per-day": "Britse thermische eenheden per dag", + "mbtu-per-hour": "Duizend Britse thermische eenheden per uur", + "mbtu-per-second": "Duizend Britse thermische eenheden per seconde", + "mbtu-per-day": "Duizend Britse thermische eenheden per dag", + "mmbtu-per-hour": "Miljoen Britse thermische eenheden per uur", + "mmbtu-per-second": "Miljoen Britse thermische eenheden per seconde", + "mmbtu-per-day": "Miljoen Britse thermische eenheden per dag", + "foot-pound-per-second": "Voet-pond per seconde", "coulomb": "Coulomb", "millicoulomb": "Millicoulomb", "microcoulomb": "Microcoulomb", + "nanocoulomb": "Nanocoulomb", "picocoulomb": "Picocoulomb", "coulomb-per-meter": "Coulomb per meter", "coulomb-per-cubic-meter": "Coulomb per kubieke meter", @@ -5997,24 +6320,31 @@ "barn": "Barn", "circular-inch": "Circulaire inch", "milliampere-hour": "Milliampère-uur", - "ampere-hours": "Ampère-uren", - "kiloampere-hours": "Kiloampère-uren", + "ampere-hours": "Ampère-uur", + "kiloampere-hours": "Kiloampère-uur", "nanoampere": "Nanoampère", "picoampere": "Picoampère", "microampere": "Microampère", "milliampere": "Milliampère", "ampere": "Ampère", + "kiloampere": "Kiloampère", + "megaampere": "Megaampère", + "gigaampere": "Gigaampère", "microampere-per-square-centimeter": "Microampère per vierkante centimeter", "ampere-per-square-meter": "Ampère per vierkante meter", "ampere-per-meter": "Ampère per meter", "oersted": "Oersted", - "bohr-magneton": "Bohr Magneton", - "ampere-meter-squared": "Ampère-meter in het kwadraat", + "bohr-magneton": "Bohr-magneton", + "ampere-meter-squared": "Ampère-meter kwadraat", "nanovolt": "Nanovolt", "picovolt": "Picovolt", + "millivolt": "Millivolt", + "microvolt": "Microvolt", "volt": "Volt", - "dbmV": "dBmV", - "dbm": "dBm", + "kilovolt": "Kilovolt", + "megavolt": "Megavolt", + "dbmV": "Decibel volt", + "dbm": "Decibel-milliwatt", "volt-meter": "Volt-meter", "kilovolt-meter": "Kilovolt-meter", "megavolt-meter": "Megavolt-meter", @@ -6027,16 +6357,18 @@ "kilohm": "Kilo-ohm", "megohm": "Mega-ohm", "gigohm": "Giga-ohm", + "millihertz": "Millihertz", "hertz": "Hertz", "kilohertz": "Kilohertz", "megahertz": "Megahertz", "gigahertz": "Gigahertz", + "terahertz": "Terahertz", "rpm": "Omwentelingen per minuut", "candela-per-square-meter": "Candela per vierkante meter", "candela": "Candela", "lumen": "Lumen", "lux": "Lux", - "foot-candle": "Voet-candela", + "foot-candle": "Foot-candle", "lumen-per-square-meter": "Lumen per vierkante meter", "lux-second": "Lux-seconde", "lumen-second": "Lumen-seconde", @@ -6047,11 +6379,11 @@ "millimole": "Millimol", "kilomole": "Kilomol", "mole-per-cubic-meter": "Mol per kubieke meter", - "rssi": "RSSI", - "ppm": "Deeltjes per miljoen (ppm)", - "ppb": "Deeltjes per miljard (ppb)", + "rssi": "Ontvangen signaalsterkte-indicator", + "ppm": "Deeltjes per miljoen", + "ppb": "Deeltjes per miljard", "micrograms-per-cubic-meter": "Microgram per kubieke meter", - "aqi": "Luchtkwaliteitsindex (AQI)", + "aqi": "Luchtkwaliteitsindex", "gram-per-cubic-meter": "Gram per kubieke meter", "gram-per-kilogram": "Specifieke vochtigheid", "millimeters-per-second": "Millimeter per seconde", @@ -6064,7 +6396,7 @@ "gray": "Gray", "sievert": "Sievert", "roentgen": "Röntgen", - "cps": "Tellingen per seconde", + "cps": "Tel per seconde", "rad": "Rad", "rem": "Rem", "dps": "Desintegraties per seconde", @@ -6077,7 +6409,7 @@ "gy-per-second": "Gray per seconde", "watt-per-steradian": "Watt per steradiaal", "watt-per-square-metre-steradian": "Watt per vierkante meter-steradiaal", - "ph-level": "pH-waarde", + "ph-level": "pH-niveau", "turbidity": "Troebelheid", "mg-per-liter": "Milligram per liter", "microsiemens-per-centimeter": "Microsiemens per centimeter", @@ -6116,6 +6448,9 @@ "millibars": "Millibar", "inch-of-mercury": "Inch kwik", "richter-scale": "Richterschaal", + "nanosecond": "Nanoseconde", + "microsecond": "Microseconde", + "millisecond": "Milliseco nde", "second": "Seconde", "minute": "Minuut", "hour": "Uur", @@ -6131,6 +6466,7 @@ "gallons-per-minute": "Gallon per minuut", "cubic-foot-per-second": "Kubieke voet per seconde", "milliliters-per-minute": "Milliliter per minuut", + "cubic-decimeter-per-second": "Kubieke decimeter per seconde", "bit": "Bit", "byte": "Byte", "kilobyte": "Kilobyte", @@ -6153,6 +6489,9 @@ "degree": "Graad", "radian": "Radiaal", "gradian": "Gradiënt", + "arcminute": "Boogminuut", + "arcsecond": "Boogseconde", + "milliradian": "Milliradiaal", "revolution": "Omwenteling", "siemens": "Siemens", "millisiemens": "Millisiemens", @@ -6168,7 +6507,7 @@ "kilofarad": "Kilofarad", "megafarad": "Megafarad", "gigafarad": "Gigafarad", - "terfarad": "Terafarad", + "terfarad": "Terfarad", "farad-per-meter": "Farad per meter", "tesla": "Tesla", "gauss": "Gauss", @@ -6184,7 +6523,7 @@ "square-meter-per-second": "Vierkante meter per seconde", "square-centimeter-per-second": "Vierkante centimeter per seconde", "stoke": "Stoke", - "centistokes": "Centistokes", + "centistokes": "Centistoke", "square-foot-per-second": "Vierkante voet per seconde", "square-inch-per-second": "Vierkante inch per seconde", "pascal-second": "Pascal-seconde", @@ -6195,7 +6534,7 @@ "newton-second-per-square-meter": "Newton-seconde per vierkante meter", "dyne-second-per-square-centimeter": "Dyne-seconde per vierkante centimeter", "kilogram-per-meter-second": "Kilogram per meter-seconde", - "tesla-square-meters": "Tesla vierkante meters", + "tesla-square-meters": "Tesla vierkante meter", "maxwell": "Maxwell", "tesla-per-meter": "Tesla per meter", "gauss-per-centimeter": "Gauss per centimeter", @@ -6209,13 +6548,13 @@ "microhenry": "Microhenry", "nanohenry": "Nanohenry", "henry-per-meter": "Henry per meter", - "tesla-meter-per-ampere": "Tesla-meter per ampère", + "tesla-meter-per-ampere": "Tesla meter per ampère", "gauss-per-oersted": "Gauss per oersted", "kilogram-per-mole": "Kilogram per mol", "gram-per-mole": "Gram per mol", "milligram-per-mole": "Milligram per mol", "joule-per-mole": "Joule per mol", - "joule-per-mole-kelvin": "Joule per mol-Kelvin", + "joule-per-mole-kelvin": "Joule per mol-kelvin", "millivolts-per-meter": "Millivolt per meter", "volts-per-meter": "Volt per meter", "kilovolts-per-meter": "Kilovolt per meter", @@ -6223,9 +6562,11 @@ "radian-per-second-squared": "Radiaal per seconde kwadraat", "revolutions-per-minute-per-second": "Hoeksversnelling", "deg-per-second": "Graden per seconde", + "rotation-per-minute": "Rotatie per minuut", "degrees-brix": "Graden Brix", "katal": "Katal", - "katal-per-cubic-metre": "Katal per kubieke meter" + "katal-per-cubic-metre": "Katal per kubieke meter", + "paris-inch": "Parijse inch" }, "user": { "user": "Gebruiker", @@ -6387,17 +6728,17 @@ "no-widgets": "Nog geen widgets", "no-widgets-text": "Geen widgets gevonden", "management": "Widgetbeheer", - "editor": "Widgeteditor", + "editor": "Widget-editor", "confirm-to-exit-editor-html": "U heeft niet-opgeslagen widgetinstellingen.
Weet u zeker dat u deze pagina wilt verlaten?", - "widget-type-not-found": "Probleem bij het laden van widgetconfiguratie.
Mogelijk is het bijbehorende widgettype verwijderd.", - "widget-type-load-error": "Widget kon niet worden geladen vanwege de volgende fouten:", + "widget-type-not-found": "Probleem bij het laden van de widgetconfiguratie.
Waarschijnlijk is het bijbehorende\n widgettype verwijderd.", + "widget-type-load-error": "Widget werd niet geladen vanwege de volgende fouten:", "remove": "Widget verwijderen", "delete": "Widget verwijderen", "edit": "Widget bewerken", "remove-widget-title": "Weet u zeker dat u de widget '{{widgetTitle}}' wilt verwijderen?", - "remove-widget-text": "Na bevestiging worden de widget en alle gerelateerde gegevens onherstelbaar verwijderd.", + "remove-widget-text": "Na bevestiging wordt de widget en alle gerelateerde gegevens onherroepelijk verwijderd.", "replace-reference-with-widget-copy": "Vervang referentie door widgetkopie", - "timeseries": "Tijdreeksen", + "timeseries": "Tijdreeks", "search-data": "Gegevens zoeken", "no-data-found": "Geen gegevens gevonden", "latest": "Laatste waarden", @@ -6673,16 +7014,16 @@ "not-set": "Niet ingesteld", "action-name": "Naam", "action-name-required": "Actienaam is verplicht.", - "action-name-not-unique": "Er bestaat al een andere actie met dezelfde naam.\nActienaam moet uniek zijn binnen dezelfde actiebron.", - "action-icon": "Pictogram", + "action-name-not-unique": "Er bestaat al een andere actie met dezelfde naam.\nDe actienaam moet uniek zijn binnen dezelfde actiebasis.", + "action-icon": "Icoon", "header-button": { "button-settings": "Knopinstellingen", "button-type": "Knoptype", "button-type-basic": "Basis", "button-type-raised": "Verhoogd", - "button-type-stroked": "Omtrokken", + "button-type-stroked": "Omlijnd", "button-type-flat": "Vlak", - "button-type-icon": "Pictogram", + "button-type-icon": "Icoon", "button-type-mini-fab": "FAB", "colors": "Kleuren", "color": "Kleur", @@ -6691,26 +7032,26 @@ "advanced-button-style": "Geavanceerde knopstijl", "button-style": "Knopstijl" }, - "show-hide-action-using-function": "Toon/verberg actie met functie", - "show-action-function": "Toon actiefunctie", + "show-hide-action-using-function": "Toon/verberg actie met behulp van functie", + "show-action-function": "Actie tonen functie", "action-type": "Type", "action-type-required": "Actietype is verplicht.", - "edit-action": "Bewerk actie", - "delete-action": "Verwijder actie", - "delete-action-title": "Verwijder widgetactie", + "edit-action": "Actie bewerken", + "delete-action": "Actie verwijderen", + "delete-action-title": "Widgetactie verwijderen", "delete-action-text": "Weet je zeker dat je de widgetactie met de naam '{{actionName}}' wilt verwijderen?", - "title-icon": "Titelpictogram", - "display-icon": "Toon titelpictogram", - "card-icon": "Kaartpictogram", - "icon": "Pictogram", - "icon-color": "Pictogramkleur", - "icon-size": "Pictogramgrootte", + "title-icon": "Titelicoon", + "display-icon": "Titelicoon weergeven", + "card-icon": "Kaarticoon", + "icon": "Icoon", + "icon-color": "Icoonkleur", + "icon-size": "Icoongrootte", "advanced-settings": "Geavanceerde instellingen", "data-settings": "Gegevensinstellingen", "limits": "Limieten", "no-data-display-message": "Alternatief bericht voor \"Geen gegevens om weer te geven\"", - "data-page-size": "Maximaal aantal entiteiten per gegevensbron", - "settings-component-not-found": "Instellingencomponent niet gevonden voor selector '{{selector}}'", + "data-page-size": "Maximum aantal entiteiten per gegevensbron", + "settings-component-not-found": "Instellingenformuliercomponent niet gevonden voor selector '{{selector}}'", "preview": "Voorbeeld", "set": "Instellen", "set-message": "Bericht instellen", @@ -6748,19 +7089,19 @@ }, "widgets": { "mobile-app-qr-code": { - "configuration-hint": "De configuratie is afhankelijk van de Mobile app QR-code widget in de hoofdinstellingen van het platform", - "get-it-on-google-play": "Download in Google Play", - "download-on-the-app-store": "Download in de App Store" + "configuration-hint": "De configuratie is afhankelijk van de QR-codewidget van de mobiele app in de hoofdinstellingen van het platform", + "get-it-on-google-play": "Downloaden via Google Play", + "download-on-the-app-store": "Downloaden via de App Store" }, "action-button": { "behavior": "Gedrag", "on-click": "Bij klikken", - "on-click-hint": "Actie die wordt geactiveerd wanneer op de knop wordt geklikt", - "first-button-click": "Klik op eerste knop", + "on-click-hint": "Actie geactiveerd wanneer op de knop wordt geklikt", + "first-button-click": "Eerste knopklik", "first-button-click-hint": "Actie bij indrukken van de eerste knop.", - "second-button-click": "Klik op tweede knop", + "second-button-click": "Tweede knopklik", "second-button-click-hint": "Actie bij indrukken van de tweede knop.", - "button-click-hint": "Actie bij klikken op de widget." + "button-click-hint": "Actie bij indrukken van de widget." }, "command-button": { "behavior": "Gedrag", @@ -7288,18 +7629,18 @@ "gateway": { "general-settings": "Algemene instellingen", "widget-title": "Widgettitel", - "default-archive-file-name": "Standaard naam archiefbestand", - "device-type-for-new-gateway": "Type apparaat voor nieuwe gateway", + "default-archive-file-name": "Standaard bestandsnaam voor archief", + "device-type-for-new-gateway": "Apparaattype voor nieuwe gateway", "messages-settings": "Berichtinstellingen", - "save-config-success-message": "Bericht bij succesvol opslaan van gatewayconfiguratie", - "device-name-exists-message": "Bericht wanneer apparaatnaam al bestaat", + "save-config-success-message": "Tekstbericht over succesvol opgeslagen gatewayconfiguratie", + "device-name-exists-message": "Tekstbericht wanneer apparaat met ingevoerde naam al bestaat", "gateway-title": "Gatewayformulier", "read-only": "Alleen-lezen", - "events-title": "Titel gatewaygebeurtenissenformulier", - "events-filter": "Filter gebeurtenissen", + "events-title": "Titel van gatewaygebeurtenissenformulier", + "events-filter": "Gebeurtenissenfilter", "event-key-contains": "Gebeurtenissleutel bevat...", "show-connector": "Tonen voor de connector", - "connector-state-param-key": "Sleutel statusparameter connector", + "connector-state-param-key": "Connectortoestand parameter sleutel", "message": "Bericht", "level": "Niveau", "created-time": "Aangemaakt op" @@ -7505,26 +7846,26 @@ "max-value-error": "Maximale waarde is {{value}}", "not-allowed-entity": "Geselecteerde entiteit kan geen gedeelde attributen hebben", "no-attribute-selected": "Geen attribuut geselecteerd", - "no-datakey-selected": "Geen datatoets geselecteerd", - "no-coordinate-specified": "Datatoets voor breedte-/lengtegraad niet opgegeven", + "no-datakey-selected": "Geen gegevenssleutel geselecteerd", + "no-coordinate-specified": "Gegevenssleutel voor breedtegraad/lengtegraad is niet opgegeven", "no-entity-selected": "Geen entiteit geselecteerd", "no-image": "Geen afbeelding", - "no-support-geolocation": "Je browser ondersteunt geen geolocatie", - "no-support-web-camera": "Je browser ondersteunt geen camera’s", - "enable-https-use-widget": "Activeer HTTPS om deze widget te gebruiken", - "no-found-your-camera": "Kan je camera niet vinden", - "no-permission-camera": "Toestemming geweigerd of geen toegang tot camera", + "no-support-geolocation": "Uw browser ondersteunt geen geolocatie", + "no-support-web-camera": "Uw browser ondersteunt geen camera's", + "enable-https-use-widget": "Schakel HTTPS in om deze widget te gebruiken", + "no-found-your-camera": "Kan uw camera niet vinden", + "no-permission-camera": "Toegang geweigerd door gebruiker / Deze site heeft geen toestemming om de camera te gebruiken", "no-timeseries-selected": "Geen tijdreeks geselecteerd", "secret-key": "Geheime sleutel", - "secret-key-required": "Geheime sleutel is verplicht", - "switch-attribute-value": "Schakel attribuutwaarde van entiteit", + "secret-key-required": "Geheime sleutel is vereist", + "switch-attribute-value": "Wijzig waarde van entiteitsattribuut", "switch-camera": "Schakel camera", - "switch-timeseries-value": "Schakel tijdreekswaarde van entiteit", - "take-photo": "Foto maken", + "switch-timeseries-value": "Wijzig waarde van entiteitstijdreeks", + "take-photo": "Maak foto", "time": "Tijd", "timeseries-not-allowed": "Tijdreeksparameter mag niet worden gebruikt in deze widget", - "update-failed": "Update mislukt", - "update-successful": "Update succesvol", + "update-failed": "Bijwerken mislukt", + "update-successful": "Bijwerken geslaagd", "update-attribute": "Attribuut bijwerken", "update-timeseries": "Tijdreeks bijwerken", "value": "Waarde", @@ -7592,47 +7933,47 @@ "image-format-jpeg": "JPEG", "image-format-png": "PNG", "image-format-webp": "WEBP", - "image-quality": "Afbeeldingskwaliteit voor verliescompressie (zoals jpeg/webp)", + "image-quality": "Afbeeldingskwaliteit voor formaten met verliescompressie zoals JPEG en WEBP", "max-image-width": "Maximale afbeeldingsbreedte", "max-image-height": "Maximale afbeeldingshoogte", "action-buttons": "Actieknoppen", "show-action-buttons": "Toon actieknoppen", - "update-all-values": "Alle waarden bijwerken, niet alleen gewijzigde", - "save-button-label": "Label voor 'OPSLAAN'-knop", - "reset-button-label": "Label voor 'ONGEDAAAN MAKEN'-knop", + "update-all-values": "Werk alle waarden bij, niet alleen gewijzigde", + "save-button-label": "Label van de knop 'OPSLAAN'", + "reset-button-label": "Label van de knop 'ONGED. MAKEN'", "group-settings": "Groepsinstellingen", - "show-group-title": "Toon titel voor groep van velden", + "show-group-title": "Toon titel voor groep van velden die bij verschillende entiteiten horen", "group-title": "Groepstitel", - "fields-alignment": "Velduitlijning", + "fields-alignment": "Uitlijning van velden", "fields-alignment-row": "Rij (standaard)", "fields-alignment-column": "Kolom", - "fields-in-row": "Aantal velden per rij", - "option-value": "Waarde (schrijf 'null' voor lege optie)", + "fields-in-row": "Aantal velden in de rij", + "option-value": "Waarde (schrijf 'null' om lege optie te maken)", "option-label": "Label", "hide-input-field": "Verberg invoerveld", - "datakey-type": "Type datatoets", + "datakey-type": "Type gegevenssleutel", "datakey-type-server": "Serverattribuut (standaard)", "datakey-type-shared": "Gedeeld attribuut", "datakey-type-timeseries": "Tijdreeks", - "datakey-value-type": "Datatoets waarde type", + "datakey-value-type": "Waarde type van gegevenssleutel", "datakey-value-type-string": "Tekenreeks", - "datakey-value-type-double": "Decimaal", + "datakey-value-type-double": "Double", "datakey-value-type-integer": "Geheel getal", "datakey-value-type-json": "JSON", - "datakey-value-type-boolean-checkbox": "Boolean (Selectievakje)", - "datakey-value-type-boolean-switch": "Boolean (Schakelaar)", - "datakey-value-type-date-time": "Datum & Tijd", + "datakey-value-type-boolean-checkbox": "Boolean (selectievakje)", + "datakey-value-type-boolean-switch": "Boolean (schakelaar)", + "datakey-value-type-date-time": "Datum en tijd", "datakey-value-type-date": "Datum", "datakey-value-type-time": "Tijd", - "datakey-value-type-select": "Keuzelijst", + "datakey-value-type-select": "Selecteer", "datakey-value-type-radio": "Radio", "datakey-value-type-color": "Kleur", "value-is-required": "Waarde is verplicht", - "ability-to-edit-attribute": "Mogelijkheid om attribuut te bewerken", + "ability-to-edit-attribute": "Bewerkbaarheid van attribuut", "ability-to-edit-attribute-editable": "Bewerkbaar (standaard)", "ability-to-edit-attribute-disabled": "Uitgeschakeld", "ability-to-edit-attribute-readonly": "Alleen-lezen", - "disable-on-datakey-name": "Uitschakelen bij false-waarde van andere datatoets (geef naam op)", + "disable-on-datakey-name": "Uitschakelen bij waarde 'false' van andere gegevenssleutel (geef naam op)", "field-appearance": "Veldweergave", "appearance-fill": "Opvulling", "appearance-outline": "Omlijning", @@ -7775,6 +8116,18 @@ "fill-area-opacity": "Opaciteit van het gevulde gebied", "range-chart-style": "Stijl van bereikgrafiek" }, + "knob": { + "behavior": "Gedrag", + "initial-value": "Initiële waarde", + "initial-value-hint": "Actie om de initiële waarde van de knop op te halen.", + "on-value-change": "Bij waarde wijziging", + "on-value-change-hint": "Actie die wordt uitgevoerd wanneer de waarde van de knop verandert.", + "range": "Bereik", + "min": "min", + "max": "max", + "value": "Waarde", + "fallback-initial-value": "Terugval initiële waarde" + }, "rpc": { "value-settings": "Waardesinstellingen", "initial-value": "Initiële waarde", @@ -7831,9 +8184,7 @@ "led-status-value-timeseries": "Tijdreeks met LED-statuswaarde", "check-status-method": "RPC-methode voor statuscontrole", "parse-led-status-value-function": "LED-statuswaarde parsing functie", - "knob-title": "Knoptitel", - "min-value": "Minimale waarde", - "max-value": "Maximale waarde" + "knob-title": "Knoptitel" }, "maps": { "map-type": { @@ -8011,10 +8362,10 @@ "action-move": "Verplaatsen", "action-remove": "Verwijderen", "edit-instruments": "Instrumenten", - "persist-location-attribute-scope": "Reikwijdte van attribuut om locatie op te slaan", - "enable-snapping": "Uitlijnen met andere punten inschakelen", - "enable-snapping-hint": "Lijnt automatisch nieuwe punten uit met bestaande vormen om tekenen eenvoudiger en nauwkeuriger te maken.", - "drag-drop-mode": "Sleepmodus", + "persist-location-attribute-scope": "Bereik van het attribuut om locatie op te slaan", + "enable-snapping": "Snapping naar andere hoekpunten inschakelen voor nauwkeurig tekenen", + "enable-snapping-hint": "Lijnt automatisch nieuwe punten uit met bestaande vormen voor eenvoudiger en nauwkeuriger tekenen.", + "drag-drop-mode": "Slepen-en-neerzetten-modus", "trip": { "no-trips": "Geen reizen geconfigureerd", "add-trip": "Reis toevoegen", @@ -8563,17 +8914,17 @@ "counter-value": "Waarde", "counter-color": "Kleur", "notification-button": "Meldingsknoppen", - "button-view-all": "Bekijk alles", + "button-view-all": "Alles bekijken", "button-filter": "Filter", "type-filter": "Typefilter", - "button-mark-read": "Markeer alles als gelezen", - "notification-types": "Meldingstypes", + "button-mark-read": "Alles als gelezen markeren", + "notification-types": "Meldingstypen", "notification-type": "Meldingstype", "search-type": "Zoektype", "any-type": "Elk type" }, "alarm-count": { - "alarm-count-card-style": "Stijl van alarmtellerkaart" + "alarm-count-card-style": "Stijl van de alarmtellerkaart" }, "entity-count": { "entity-count-card-style": "Stijl van entiteittellerkaart" @@ -8677,18 +9028,22 @@ "pie-chart-card-style": "Stijl van cirkeldiagramkaart" }, "radar-chart": { - "radar-appearance": "Uiterlijk van radardiagram", + "radar-appearance": "Radarweergave", "shape": "Vorm", - "shape-polygon": "Veelhoek", + "shape-polygon": "Polygoon", "shape-circle": "Cirkel", "color": "Kleur", "line": "Lijn", "points": "Punten", - "points-label": "Puntlabel", - "radar-axis": "Radar-as", + "points-label": "Puntenlabel", + "radar-axis": "Radaras", "axis-label": "Aslabel", - "ticks-label": "Label van streepjes", - "radar-chart-style": "Stijl van radardiagram" + "ticks-label": "Ticks-label", + "radar-chart-style": "Radarstijl", + "max-axes-scaling": "Maximale asschaling", + "max-axes-scaling-hint": "Kies of elke radarias zijn eigen maximumwaarde heeft (Gescheiden) of dat alle assen dezelfde hoogste waarde delen op basis van de widgetdataset (Gemeenschappelijk).", + "separate": "Gescheiden", + "common": "Gemeenschappelijk" }, "time-series-chart": { "chart": "Diagram", @@ -8965,12 +9320,12 @@ "cpu": "CPU", "ram": "RAM", "disk": "Schijf", - "cpu-warning-text": "Hoge CPU-belasting. Optimaliseer de systeemprestaties om systeemfouten te voorkomen.", - "cpu-critical-text": "Kritieke CPU-belasting. Optimaliseer de systeemprestaties om systeemfouten te voorkomen.", - "ram-warning-text": "Weinig RAM beschikbaar. Optimaliseer de systeemprestaties of verhoog de RAM om systeemfouten te voorkomen.", - "ram-critical-text": "Kritiek laag RAM-geheugen. Optimaliseer de systeemprestaties of verhoog de RAM om systeemfouten te voorkomen.", - "disk-warning-text": "Weinig schijfruimte beschikbaar. Maak ruimte vrij of breid de schijfruimte uit om dataverlies te voorkomen.", - "disk-critical-text": "Kritiek weinig schijfruimte beschikbaar. Maak ruimte vrij of breid de schijfruimte uit om dataverlies te voorkomen." + "cpu-warning-text": "Hoge CPU-belasting. Optimaliseer de systeemprestaties om storingen te voorkomen.", + "cpu-critical-text": "Kritieke CPU-belasting. Optimaliseer de systeemprestaties om storingen te voorkomen.", + "ram-warning-text": "Weinig RAM beschikbaar. Verhoog RAM of optimaliseer prestaties om storingen te voorkomen.", + "ram-critical-text": "Kritiek tekort aan RAM. Verhoog RAM of optimaliseer prestaties om storingen te voorkomen.", + "disk-warning-text": "Weinig schijfruimte beschikbaar. Maak ruimte vrij of vergroot de opslagcapaciteit om dataverlies te voorkomen.", + "disk-critical-text": "Kritieke schijfruimte. Maak ruimte vrij of vergroot de opslagcapaciteit om dataverlies te voorkomen." }, "cluster-info": { "service-id": "Service-ID", @@ -9194,4 +9549,4 @@ "language": { "language": "Taal" } -} +} \ No newline at end of file From e7c72dad26981a807c08c7da8965d5f42a4d685c Mon Sep 17 00:00:00 2001 From: Viacheslav Klimov Date: Thu, 11 Dec 2025 15:41:13 +0200 Subject: [PATCH 07/13] Handle all exceptions when parsing CalculatedFieldStateProto --- .../cf/ctx/state/RocksDBCalculatedFieldStateService.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/RocksDBCalculatedFieldStateService.java b/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/RocksDBCalculatedFieldStateService.java index d99689f4ee..d17060d093 100644 --- a/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/RocksDBCalculatedFieldStateService.java +++ b/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/RocksDBCalculatedFieldStateService.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.service.cf.ctx.state; -import com.google.protobuf.InvalidProtocolBufferException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; @@ -66,7 +65,7 @@ public class RocksDBCalculatedFieldStateService extends AbstractCalculatedFieldS CalculatedFieldStateProto stateMsg; try { stateMsg = CalculatedFieldStateProto.parseFrom(value); - } catch (InvalidProtocolBufferException e) { + } catch (Exception e) { log.error("Failed to parse CalculatedFieldStateProto for key {}", key, e); return; } From df0b5a356f444da3bec70631f43e171e33609110 Mon Sep 17 00:00:00 2001 From: Sergey Matvienko Date: Wed, 10 Dec 2025 11:16:48 +0100 Subject: [PATCH 08/13] enable deb install on Java 17,21,25 --- packaging/java/build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packaging/java/build.gradle b/packaging/java/build.gradle index 499c34c412..d953bf231d 100644 --- a/packaging/java/build.gradle +++ b/packaging/java/build.gradle @@ -132,6 +132,8 @@ buildDeb { archiveFileName = "${pkgName}.deb" requires("openjdk-17-jre").or("java17-runtime").or("oracle-java17-installer").or("openjdk-17-jre-headless") + .or("openjdk-21-jre").or("java21-runtime").or("oracle-java21-installer").or("openjdk-21-jre-headless") + .or("openjdk-25-jre").or("java25-runtime").or("oracle-java25-installer").or("openjdk-25-jre-headless") from("${buildDir}/conf") { include "${pkgName}.conf" From 618e563d3b8b51685a75d626c0ff3bb66f0ae114 Mon Sep 17 00:00:00 2001 From: Sergey Matvienko Date: Thu, 11 Dec 2025 15:41:51 +0100 Subject: [PATCH 09/13] docker.base.image as a parameter --- msa/edqs/docker/Dockerfile | 2 +- msa/monitoring/docker/Dockerfile | 2 +- msa/pom.xml | 1 + msa/tb-node/docker/Dockerfile | 2 +- msa/transport/coap/docker/Dockerfile | 2 +- msa/transport/http/docker/Dockerfile | 2 +- msa/transport/lwm2m/docker/Dockerfile | 2 +- msa/transport/mqtt/docker/Dockerfile | 2 +- msa/transport/snmp/docker/Dockerfile | 2 +- msa/vc-executor-docker/docker/Dockerfile | 2 +- 10 files changed, 10 insertions(+), 9 deletions(-) diff --git a/msa/edqs/docker/Dockerfile b/msa/edqs/docker/Dockerfile index e9099c09c5..2ecd46fa45 100644 --- a/msa/edqs/docker/Dockerfile +++ b/msa/edqs/docker/Dockerfile @@ -14,7 +14,7 @@ # limitations under the License. # -FROM thingsboard/openjdk17:bookworm-slim +FROM ${docker.base.image} COPY start-tb-edqs.sh ${pkg.name}.deb /tmp/ diff --git a/msa/monitoring/docker/Dockerfile b/msa/monitoring/docker/Dockerfile index a0b38bb3bd..d32f4d06d6 100644 --- a/msa/monitoring/docker/Dockerfile +++ b/msa/monitoring/docker/Dockerfile @@ -14,7 +14,7 @@ # limitations under the License. # -FROM thingsboard/openjdk17:bookworm-slim +FROM ${docker.base.image} COPY start-tb-monitoring.sh ${pkg.name}.deb /tmp/ diff --git a/msa/pom.xml b/msa/pom.xml index 6fcf7c3523..24cc67f4bf 100644 --- a/msa/pom.xml +++ b/msa/pom.xml @@ -32,6 +32,7 @@ ${basedir}/.. thingsboard + thingsboard/openjdk17:bookworm-slim true true 1.4.13 diff --git a/msa/tb-node/docker/Dockerfile b/msa/tb-node/docker/Dockerfile index 013a37ef9c..c084c9c15b 100644 --- a/msa/tb-node/docker/Dockerfile +++ b/msa/tb-node/docker/Dockerfile @@ -14,7 +14,7 @@ # limitations under the License. # -FROM thingsboard/openjdk17:bookworm-slim +FROM ${docker.base.image} COPY logback.xml start-tb-node.sh ${pkg.name}.deb /tmp/ diff --git a/msa/transport/coap/docker/Dockerfile b/msa/transport/coap/docker/Dockerfile index 1d88541096..f5aa18898c 100644 --- a/msa/transport/coap/docker/Dockerfile +++ b/msa/transport/coap/docker/Dockerfile @@ -14,7 +14,7 @@ # limitations under the License. # -FROM thingsboard/openjdk17:bookworm-slim +FROM ${docker.base.image} COPY start-tb-coap-transport.sh ${pkg.name}.deb /tmp/ diff --git a/msa/transport/http/docker/Dockerfile b/msa/transport/http/docker/Dockerfile index d7c8622ace..f224a776ad 100644 --- a/msa/transport/http/docker/Dockerfile +++ b/msa/transport/http/docker/Dockerfile @@ -14,7 +14,7 @@ # limitations under the License. # -FROM thingsboard/openjdk17:bookworm-slim +FROM ${docker.base.image} COPY start-tb-http-transport.sh ${pkg.name}.deb /tmp/ diff --git a/msa/transport/lwm2m/docker/Dockerfile b/msa/transport/lwm2m/docker/Dockerfile index ec65d9a8a5..6b35776fce 100644 --- a/msa/transport/lwm2m/docker/Dockerfile +++ b/msa/transport/lwm2m/docker/Dockerfile @@ -14,7 +14,7 @@ # limitations under the License. # -FROM thingsboard/openjdk17:bookworm-slim +FROM ${docker.base.image} COPY start-tb-lwm2m-transport.sh ${pkg.name}.deb /tmp/ diff --git a/msa/transport/mqtt/docker/Dockerfile b/msa/transport/mqtt/docker/Dockerfile index 1502b9e3c0..270d357e4a 100644 --- a/msa/transport/mqtt/docker/Dockerfile +++ b/msa/transport/mqtt/docker/Dockerfile @@ -14,7 +14,7 @@ # limitations under the License. # -FROM thingsboard/openjdk17:bookworm-slim +FROM ${docker.base.image} COPY start-tb-mqtt-transport.sh ${pkg.name}.deb /tmp/ diff --git a/msa/transport/snmp/docker/Dockerfile b/msa/transport/snmp/docker/Dockerfile index 0ec79e5148..713ff11607 100644 --- a/msa/transport/snmp/docker/Dockerfile +++ b/msa/transport/snmp/docker/Dockerfile @@ -14,7 +14,7 @@ # limitations under the License. # -FROM thingsboard/openjdk17:bookworm-slim +FROM ${docker.base.image} COPY start-tb-snmp-transport.sh ${pkg.name}.deb /tmp/ diff --git a/msa/vc-executor-docker/docker/Dockerfile b/msa/vc-executor-docker/docker/Dockerfile index 3c65098c42..ae03092daf 100644 --- a/msa/vc-executor-docker/docker/Dockerfile +++ b/msa/vc-executor-docker/docker/Dockerfile @@ -14,7 +14,7 @@ # limitations under the License. # -FROM thingsboard/openjdk17:bookworm-slim +FROM ${docker.base.image} ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update \ From c2b92c06513ccb6ff23a8055c9de1c641a29d894 Mon Sep 17 00:00:00 2001 From: Sergey Matvienko Date: Thu, 11 Dec 2025 16:52:19 +0100 Subject: [PATCH 10/13] packaging rpm - allow Java 21 and Java 25 along with Java 17 --- packaging/java/build.gradle | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packaging/java/build.gradle b/packaging/java/build.gradle index d953bf231d..bb0c8a94de 100644 --- a/packaging/java/build.gradle +++ b/packaging/java/build.gradle @@ -92,7 +92,11 @@ buildRpm { archiveVersion = projectVersion.replace('-', '') archiveFileName = "${pkgName}.rpm" - requires("(java-17 or java-17-headless or jre-17 or jre-17-headless)") // .or() notation does work in RPM plugin + // Support Java 17 (existing), plus Java 21 and Java 25 for RPM-based distros + // Keep using RPM boolean expression syntax since .or() chaining is for DEB only + requires("(java-17 or java-17-headless or jre-17 or jre-17-headless or " + + "java-21 or java-21-headless or jre-21 or jre-21-headless or " + + "java-25 or java-25-headless or jre-25 or jre-25-headless)") from("${buildDir}/conf") { include "${pkgName}.conf" From 75df58aac617430b0ab92b100441d0871ffd2eb7 Mon Sep 17 00:00:00 2001 From: nickAS21 Date: Fri, 12 Dec 2025 10:59:35 +0200 Subject: [PATCH 11/13] lwm2m: The device profile ID is null. Return Lwm2mDeviceProfileTransportConfiguration with default. --- .../device/DeviceBulkImportService.java | 3 +-- ...2mDeviceProfileTransportConfiguration.java | 14 +++++++++++ .../server/client/LwM2mClientContextImpl.java | 23 +++++++++++-------- .../uplink/DefaultLwM2mUplinkMsgHandler.java | 22 ++++++++++++------ 4 files changed, 44 insertions(+), 18 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/device/DeviceBulkImportService.java b/application/src/main/java/org/thingsboard/server/service/device/DeviceBulkImportService.java index d042fb2657..c8925f9ee9 100644 --- a/application/src/main/java/org/thingsboard/server/service/device/DeviceBulkImportService.java +++ b/application/src/main/java/org/thingsboard/server/service/device/DeviceBulkImportService.java @@ -258,8 +258,7 @@ public class DeviceBulkImportService extends AbstractBulkImportService { Lwm2mDeviceProfileTransportConfiguration transportConfiguration = new Lwm2mDeviceProfileTransportConfiguration(); transportConfiguration.setBootstrap(Collections.emptyList()); - transportConfiguration.setClientLwM2mSettings(new OtherConfiguration(false,1, 1, 1, PowerMode.DRX, null, null, null, null, null, V1_0.toString())); - transportConfiguration.setObserveAttr(new TelemetryMappingConfiguration(Collections.emptyMap(), Collections.emptySet(), Collections.emptySet(), Collections.emptySet(), Collections.emptyMap(), SINGLE)); + transportConfiguration.setClientLwM2mSettings(new OtherConfiguration()); DeviceProfileData deviceProfileData = new DeviceProfileData(); DefaultDeviceProfileConfiguration configuration = new DefaultDeviceProfileConfiguration(); diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/Lwm2mDeviceProfileTransportConfiguration.java b/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/Lwm2mDeviceProfileTransportConfiguration.java index 614da6cde6..e58ed8c04a 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/Lwm2mDeviceProfileTransportConfiguration.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/Lwm2mDeviceProfileTransportConfiguration.java @@ -17,10 +17,15 @@ package org.thingsboard.server.common.data.device.profile; import lombok.Data; import org.thingsboard.server.common.data.DeviceTransportType; +import org.thingsboard.server.common.data.device.data.PowerMode; import org.thingsboard.server.common.data.device.profile.lwm2m.OtherConfiguration; import org.thingsboard.server.common.data.device.profile.lwm2m.TelemetryMappingConfiguration; import org.thingsboard.server.common.data.device.profile.lwm2m.bootstrap.LwM2MBootstrapServerCredential; +import static org.eclipse.leshan.core.LwM2m.Version.V1_0; +import static org.thingsboard.server.common.data.device.profile.lwm2m.TelemetryObserveStrategy.SINGLE; + +import java.util.Collections; import java.util.List; @Data @@ -33,9 +38,18 @@ public class Lwm2mDeviceProfileTransportConfiguration implements DeviceProfileTr private List bootstrap; private OtherConfiguration clientLwM2mSettings; + public Lwm2mDeviceProfileTransportConfiguration() { + updateDefault(); + } + @Override public DeviceTransportType getType() { return DeviceTransportType.LWM2M; } + private void updateDefault(){ + this.setBootstrap(Collections.emptyList()); + this.setClientLwM2mSettings(new OtherConfiguration(false,1, 1, 1, PowerMode.DRX, null, null, null, null, null, V1_0.toString())); + this.setObserveAttr(new TelemetryMappingConfiguration(Collections.emptyMap(), Collections.emptySet(), Collections.emptySet(), Collections.emptySet(), Collections.emptyMap(), SINGLE)); + } } diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/LwM2mClientContextImpl.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/LwM2mClientContextImpl.java index f5165f47c8..36cf1639db 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/LwM2mClientContextImpl.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/LwM2mClientContextImpl.java @@ -364,16 +364,21 @@ public class LwM2mClientContextImpl implements LwM2mClientContext { } private Lwm2mDeviceProfileTransportConfiguration doGetAndCache(UUID profileId) { - - Lwm2mDeviceProfileTransportConfiguration result = profiles.get(profileId); - if (result == null) { - log.debug("Fetching profile [{}]", profileId); - DeviceProfile deviceProfile = deviceProfileCache.get(new DeviceProfileId(profileId)); - if (deviceProfile != null) { - result = profileUpdate(deviceProfile); - } else { - log.warn("Device profile was not found! Most probably device profile [{}] has been removed from the database.", profileId); + Lwm2mDeviceProfileTransportConfiguration result; + if (profileId != null) { + result = profiles.get(profileId); + if (result == null) { + log.debug("Fetching profile [{}]", profileId); + DeviceProfile deviceProfile = deviceProfileCache.get(new DeviceProfileId(profileId)); + if (deviceProfile != null) { + result = profileUpdate(deviceProfile); + } else { + log.warn("Device profile was not found! Most probably device profile [{}] has been removed from the database.", profileId); + } } + } else { + log.warn("Device profile not found! The device profile ID is null. Return Lwm2mDeviceProfileTransportConfiguration with default."); + result = new Lwm2mDeviceProfileTransportConfiguration(); } return result; } diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/uplink/DefaultLwM2mUplinkMsgHandler.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/uplink/DefaultLwM2mUplinkMsgHandler.java index 79b9d4481a..5e27b936f3 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/uplink/DefaultLwM2mUplinkMsgHandler.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/uplink/DefaultLwM2mUplinkMsgHandler.java @@ -484,13 +484,18 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl */ private void initClientTelemetry(LwM2mClient lwM2MClient) { Lwm2mDeviceProfileTransportConfiguration profile = clientContext.getProfile(lwM2MClient.getRegistration()); - Set supportedObjects = clientContext.getSupportedIdVerInClient(lwM2MClient); - if (supportedObjects != null && supportedObjects.size() > 0) { - this.sendReadRequests(lwM2MClient, profile, supportedObjects); - this.sendInitObserveRequests(lwM2MClient, profile, supportedObjects); - this.sendWriteAttributeRequests(lwM2MClient, profile, supportedObjects); + if (profile != null) { + Set supportedObjects = clientContext.getSupportedIdVerInClient(lwM2MClient); + if (supportedObjects != null && !supportedObjects.isEmpty()) { + this.sendInitObserveRequests(lwM2MClient, profile, supportedObjects); + this.sendReadRequests(lwM2MClient, profile, supportedObjects); + this.sendWriteAttributeRequests(lwM2MClient, profile, supportedObjects); // Removed. Used only for debug. // this.sendDiscoverRequests(lwM2MClient, profile, supportedObjects); + } + } else { + log.warn("[{}] Failed to process initClientTelemetry! Profile is null. Update procedure may not have completed after reboot yet", lwM2MClient.getEndpoint()); + logService.log(lwM2MClient, "Failed to process initClientTelemetry. Profile is null. Update procedure may not have completed after reboot yet"); } } @@ -1016,7 +1021,7 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl }); } - private void updateValueOta(List clients, Lwm2mDeviceProfileTransportConfiguration oldProfile, Lwm2mDeviceProfileTransportConfiguration newProfile) { + private void updateValueOta(List clients, Lwm2mDeviceProfileTransportConfiguration newProfile, Lwm2mDeviceProfileTransportConfiguration oldProfile) { OtherConfiguration newLwM2mSettings = newProfile.getClientLwM2mSettings(); OtherConfiguration oldLwM2mSettings = oldProfile.getClientLwM2mSettings(); if (!newLwM2mSettings.getFwUpdateStrategy().equals(oldLwM2mSettings.getFwUpdateStrategy()) @@ -1098,6 +1103,9 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl v -> attributesService.onAttributesUpdate(lwM2MClient, v, logFailedUpdateOfNonChangedValue), t -> log.error("[{}] Failed to get attributes", lwM2MClient.getEndpoint(), t), executor); + } else { + log.warn("[{}] Failed to process initAttributes! Profile is null. Update procedure may not have completed after reboot yet", lwM2MClient.getEndpoint()); + logService.log(lwM2MClient, "Failed to process initAttributes. Profile is null. Update procedure may not have completed after reboot yet"); } } @@ -1107,7 +1115,7 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl private Map getNamesFromProfileForSharedAttributes(LwM2mClient lwM2MClient) { Lwm2mDeviceProfileTransportConfiguration profile = clientContext.getProfile(lwM2MClient.getRegistration()); - return profile.getObserveAttr().getKeyName(); + return profile != null ? profile.getObserveAttr().getKeyName() : Collections.emptyMap(); } public LwM2MTransportServerConfig getConfig() { From 4532d7cc8af950eb3e73c276dd0aa4c818173044 Mon Sep 17 00:00:00 2001 From: nickAS21 Date: Fri, 12 Dec 2025 11:55:14 +0200 Subject: [PATCH 12/13] lwm2m: testFirmwareUpdateByObject5WithObject19_Ok: TIMEOUT*2 => 19/65533/0 or 19/65534/0 --- .../transport/lwm2m/ota/AbstractOtaLwM2MIntegrationTest.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/application/src/test/java/org/thingsboard/server/transport/lwm2m/ota/AbstractOtaLwM2MIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/lwm2m/ota/AbstractOtaLwM2MIntegrationTest.java index cff56694e5..e9dd427f7f 100644 --- a/application/src/test/java/org/thingsboard/server/transport/lwm2m/ota/AbstractOtaLwM2MIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/lwm2m/ota/AbstractOtaLwM2MIntegrationTest.java @@ -37,8 +37,10 @@ import java.util.Comparator; import java.util.List; import java.util.Optional; import java.util.UUID; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import static org.awaitility.Awaitility.await; import static org.junit.Assert.assertEquals; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.thingsboard.rest.client.utils.RestJsonConverter.toTimeseries; @@ -249,6 +251,9 @@ public abstract class AbstractOtaLwM2MIntegrationTest extends AbstractLwM2MInteg } protected void resultReadOtaParams_19(String resourceIdVer, OtaPackageInfo otaPackageInfo) throws Exception { + await("await on Read") + .atMost(TIMEOUT*2, TimeUnit.SECONDS) + .until(() -> Boolean.valueOf(sendRPCById(resourceIdVer))); String actualResult = sendRPCById(resourceIdVer); ObjectNode rpcActualResult = JacksonUtil.fromString(actualResult, ObjectNode.class); assertEquals(ResponseCode.CONTENT.getName(), rpcActualResult.get("result").asText()); From 1044aabce371d1ee7e65870fa70c86055f66dda6 Mon Sep 17 00:00:00 2001 From: Viacheslav Klimov Date: Fri, 12 Dec 2025 16:13:32 +0200 Subject: [PATCH 13/13] Fix Kafka topics cache --- .../src/main/resources/thingsboard.yml | 2 ++ .../server/queue/kafka/KafkaAdmin.java | 29 +++++++++---------- .../server/queue/kafka/TbKafkaSettings.java | 1 + edqs/src/main/resources/edqs.yml | 2 ++ .../src/main/resources/tb-vc-executor.yml | 2 ++ .../src/main/resources/tb-coap-transport.yml | 2 ++ .../src/main/resources/tb-http-transport.yml | 2 ++ .../src/main/resources/tb-lwm2m-transport.yml | 2 ++ .../src/main/resources/tb-mqtt-transport.yml | 2 ++ .../src/main/resources/tb-snmp-transport.yml | 2 ++ 10 files changed, 30 insertions(+), 16 deletions(-) diff --git a/application/src/main/resources/thingsboard.yml b/application/src/main/resources/thingsboard.yml index dfdd3a407c..cda7f5782a 100644 --- a/application/src/main/resources/thingsboard.yml +++ b/application/src/main/resources/thingsboard.yml @@ -1720,6 +1720,8 @@ queue: print-interval-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_MIN_PRINT_INTERVAL_MS:60000}" # Time to wait for the stats-loading requests to Kafka to finish kafka-response-timeout-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_RESPONSE_TIMEOUT_MS:1000}" + # Topics cache TTL in milliseconds. 5 minutes by default + topics_cache_ttl_ms: "${TB_QUEUE_KAFKA_TOPICS_CACHE_TTL_MS:300000}" partitions: hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" # murmur3_32, murmur3_128 or sha256 transport_api: diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/kafka/KafkaAdmin.java b/common/queue/src/main/java/org/thingsboard/server/queue/kafka/KafkaAdmin.java index 6261e81497..3e2c64de69 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/kafka/KafkaAdmin.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/kafka/KafkaAdmin.java @@ -58,15 +58,12 @@ public class KafkaAdmin { private final TbKafkaSettings settings; - @Value("${queue.kafka.request.timeout.ms:30000}") - private int requestTimeoutMs; - @Value("${queue.kafka.topics_cache_ttl_ms:300000}") // 5 minutes by default - private int topicsCacheTtlMs; - private final LazyInitializer adminClient; private final CachedValue> topics; - public KafkaAdmin(@Lazy TbKafkaSettings settings) { + public KafkaAdmin(@Lazy TbKafkaSettings settings, + @Value("${queue.kafka.topics_cache_ttl_ms:300000}") + int topicsCacheTtlMs) { this.settings = settings; this.adminClient = LazyInitializer.builder() .setInitializer(() -> AdminClient.create(settings.toAdminProps())) @@ -91,7 +88,7 @@ public class KafkaAdmin { NewTopic newTopic = new NewTopic(topic, partitions, settings.getReplicationFactor()).configs(properties); try { - getClient().createTopics(List.of(newTopic)).all().get(requestTimeoutMs, TimeUnit.MILLISECONDS); + getClient().createTopics(List.of(newTopic)).all().get(settings.getRequestTimeoutMs(), TimeUnit.MILLISECONDS); topics.add(topic); } catch (ExecutionException ee) { log.trace("Failed to create topic {} with properties {}", topic, properties, ee); @@ -110,7 +107,7 @@ public class KafkaAdmin { public void deleteTopic(String topic) { log.debug("Deleting topic {}", topic); try { - getClient().deleteTopics(List.of(topic)).all().get(requestTimeoutMs, TimeUnit.MILLISECONDS); + getClient().deleteTopics(List.of(topic)).all().get(settings.getRequestTimeoutMs(), TimeUnit.MILLISECONDS); } catch (Exception e) { log.error("Failed to delete kafka topic [{}].", topic, e); } @@ -122,7 +119,7 @@ public class KafkaAdmin { public Set listTopics() { try { - Set topics = getClient().listTopics().names().get(requestTimeoutMs, TimeUnit.MILLISECONDS); + Set topics = getClient().listTopics().names().get(settings.getRequestTimeoutMs(), TimeUnit.MILLISECONDS); log.trace("Listed topics: {}", topics); return topics; } catch (Exception e) { @@ -150,7 +147,7 @@ public class KafkaAdmin { .collect(Collectors.toMap(tp -> tp, tp -> OffsetSpec.latest())); Map endOffsets = - getClient().listOffsets(latestOffsetsSpec).all().get(requestTimeoutMs, TimeUnit.MILLISECONDS); + getClient().listOffsets(latestOffsetsSpec).all().get(settings.getRequestTimeoutMs(), TimeUnit.MILLISECONDS); return committedOffsets.entrySet().stream() .mapToLong(entry -> { @@ -169,7 +166,7 @@ public class KafkaAdmin { @SneakyThrows public Map getConsumerGroupOffsets(String groupId) { - return getClient().listConsumerGroupOffsets(groupId).partitionsToOffsetAndMetadata().get(requestTimeoutMs, TimeUnit.MILLISECONDS); + return getClient().listConsumerGroupOffsets(groupId).partitionsToOffsetAndMetadata().get(settings.getRequestTimeoutMs(), TimeUnit.MILLISECONDS); } /** @@ -212,7 +209,7 @@ public class KafkaAdmin { } else { log.info("[{}] SHOULD alter topic offset [{}] less than old node group offset [{}]", tp, existingOffset.offset(), om.offset()); } - getClient().alterConsumerGroupOffsets(newGroupId, Map.of(tp, om)).all().get(requestTimeoutMs, TimeUnit.MILLISECONDS); + getClient().alterConsumerGroupOffsets(newGroupId, Map.of(tp, om)).all().get(settings.getRequestTimeoutMs(), TimeUnit.MILLISECONDS); log.info("[{}] altered new consumer groupId {}", tp, newGroupId); break; } @@ -229,7 +226,7 @@ public class KafkaAdmin { return true; } - List allPartitions = getClient().describeTopics(existingTopics).allTopicNames().get(requestTimeoutMs, TimeUnit.MILLISECONDS) + List allPartitions = getClient().describeTopics(existingTopics).allTopicNames().get(settings.getRequestTimeoutMs(), TimeUnit.MILLISECONDS) .entrySet().stream() .flatMap(entry -> { String topic = entry.getKey(); @@ -239,9 +236,9 @@ public class KafkaAdmin { .toList(); Map beginningOffsets = getClient().listOffsets(allPartitions.stream() - .collect(Collectors.toMap(partition -> partition, partition -> OffsetSpec.earliest()))).all().get(requestTimeoutMs, TimeUnit.MILLISECONDS); + .collect(Collectors.toMap(partition -> partition, partition -> OffsetSpec.earliest()))).all().get(settings.getRequestTimeoutMs(), TimeUnit.MILLISECONDS); Map endOffsets = getClient().listOffsets(allPartitions.stream() - .collect(Collectors.toMap(partition -> partition, partition -> OffsetSpec.latest()))).all().get(requestTimeoutMs, TimeUnit.MILLISECONDS); + .collect(Collectors.toMap(partition -> partition, partition -> OffsetSpec.latest()))).all().get(settings.getRequestTimeoutMs(), TimeUnit.MILLISECONDS); for (TopicPartition partition : allPartitions) { long beginningOffset = beginningOffsets.get(partition).offset(); @@ -261,7 +258,7 @@ public class KafkaAdmin { public void deleteConsumerGroup(String consumerGroupId) { try { - getClient().deleteConsumerGroups(List.of(consumerGroupId)).all().get(requestTimeoutMs, TimeUnit.MILLISECONDS); + getClient().deleteConsumerGroups(List.of(consumerGroupId)).all().get(settings.getRequestTimeoutMs(), TimeUnit.MILLISECONDS); } catch (Exception e) { log.warn("Failed to delete consumer group {}", consumerGroupId, e); } diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/kafka/TbKafkaSettings.java b/common/queue/src/main/java/org/thingsboard/server/queue/kafka/TbKafkaSettings.java index 11736f68cf..3dbcff1863 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/kafka/TbKafkaSettings.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/kafka/TbKafkaSettings.java @@ -112,6 +112,7 @@ public class TbKafkaSettings { @Value("${queue.kafka.fetch_max_bytes:134217728}") private int fetchMaxBytes; + @Getter @Value("${queue.kafka.request.timeout.ms:30000}") private int requestTimeoutMs; diff --git a/edqs/src/main/resources/edqs.yml b/edqs/src/main/resources/edqs.yml index f6b611d5a9..9bdee541a3 100644 --- a/edqs/src/main/resources/edqs.yml +++ b/edqs/src/main/resources/edqs.yml @@ -177,6 +177,8 @@ queue: print-interval-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_MIN_PRINT_INTERVAL_MS:60000}" # Time to wait for the stats-loading requests to Kafka to finish kafka-response-timeout-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_RESPONSE_TIMEOUT_MS:1000}" + # Topics cache TTL in milliseconds. 5 minutes by default + topics_cache_ttl_ms: "${TB_QUEUE_KAFKA_TOPICS_CACHE_TTL_MS:300000}" partitions: hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" # murmur3_32, murmur3_128 or sha256 diff --git a/msa/vc-executor/src/main/resources/tb-vc-executor.yml b/msa/vc-executor/src/main/resources/tb-vc-executor.yml index 7d1166e512..ea89fb7d23 100644 --- a/msa/vc-executor/src/main/resources/tb-vc-executor.yml +++ b/msa/vc-executor/src/main/resources/tb-vc-executor.yml @@ -151,6 +151,8 @@ queue: print-interval-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_MIN_PRINT_INTERVAL_MS:60000}" # Time to wait for the stats-loading requests to Kafka to finis kafka-response-timeout-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_RESPONSE_TIMEOUT_MS:1000}" + # Topics cache TTL in milliseconds. 5 minutes by default + topics_cache_ttl_ms: "${TB_QUEUE_KAFKA_TOPICS_CACHE_TTL_MS:300000}" partitions: hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" # murmur3_32, murmur3_128 or sha256 core: diff --git a/transport/coap/src/main/resources/tb-coap-transport.yml b/transport/coap/src/main/resources/tb-coap-transport.yml index f40a09c753..02ec421366 100644 --- a/transport/coap/src/main/resources/tb-coap-transport.yml +++ b/transport/coap/src/main/resources/tb-coap-transport.yml @@ -332,6 +332,8 @@ queue: notifications: "${TB_QUEUE_KAFKA_NOTIFICATIONS_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:52428800;retention.bytes:1048576000;partitions:1;min.insync.replicas:1}" # Kafka properties for Housekeeper tasks topic housekeeper: "${TB_QUEUE_KAFKA_HOUSEKEEPER_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:52428800;retention.bytes:1048576000;partitions:10;min.insync.replicas:1}" + # Topics cache TTL in milliseconds. 5 minutes by default + topics_cache_ttl_ms: "${TB_QUEUE_KAFKA_TOPICS_CACHE_TTL_MS:300000}" partitions: hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" # murmur3_32, murmur3_128 or sha256 transport_api: diff --git a/transport/http/src/main/resources/tb-http-transport.yml b/transport/http/src/main/resources/tb-http-transport.yml index 587894d5ce..7fe35a57d5 100644 --- a/transport/http/src/main/resources/tb-http-transport.yml +++ b/transport/http/src/main/resources/tb-http-transport.yml @@ -281,6 +281,8 @@ queue: notifications: "${TB_QUEUE_KAFKA_NOTIFICATIONS_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:52428800;retention.bytes:1048576000;partitions:1;min.insync.replicas:1}" # Kafka properties for Housekeeper tasks topic housekeeper: "${TB_QUEUE_KAFKA_HOUSEKEEPER_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:52428800;retention.bytes:1048576000;partitions:10;min.insync.replicas:1}" + # Topics cache TTL in milliseconds. 5 minutes by default + topics_cache_ttl_ms: "${TB_QUEUE_KAFKA_TOPICS_CACHE_TTL_MS:300000}" partitions: hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" # murmur3_32, murmur3_128 or sha256 transport_api: diff --git a/transport/lwm2m/src/main/resources/tb-lwm2m-transport.yml b/transport/lwm2m/src/main/resources/tb-lwm2m-transport.yml index 0895bfa676..b1718a2099 100644 --- a/transport/lwm2m/src/main/resources/tb-lwm2m-transport.yml +++ b/transport/lwm2m/src/main/resources/tb-lwm2m-transport.yml @@ -382,6 +382,8 @@ queue: notifications: "${TB_QUEUE_KAFKA_NOTIFICATIONS_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:52428800;retention.bytes:1048576000;partitions:1;min.insync.replicas:1}" # Kafka properties for Housekeeper tasks topic housekeeper: "${TB_QUEUE_KAFKA_HOUSEKEEPER_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:52428800;retention.bytes:1048576000;partitions:10;min.insync.replicas:1}" + # Topics cache TTL in milliseconds. 5 minutes by default + topics_cache_ttl_ms: "${TB_QUEUE_KAFKA_TOPICS_CACHE_TTL_MS:300000}" partitions: hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" # murmur3_32, murmur3_128 or sha256 transport_api: diff --git a/transport/mqtt/src/main/resources/tb-mqtt-transport.yml b/transport/mqtt/src/main/resources/tb-mqtt-transport.yml index fae10cc892..86e5dc5a5b 100644 --- a/transport/mqtt/src/main/resources/tb-mqtt-transport.yml +++ b/transport/mqtt/src/main/resources/tb-mqtt-transport.yml @@ -315,6 +315,8 @@ queue: notifications: "${TB_QUEUE_KAFKA_NOTIFICATIONS_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:52428800;retention.bytes:1048576000;partitions:1;min.insync.replicas:1}" # Kafka properties for Housekeeper tasks topic housekeeper: "${TB_QUEUE_KAFKA_HOUSEKEEPER_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:52428800;retention.bytes:1048576000;partitions:10;min.insync.replicas:1}" + # Topics cache TTL in milliseconds. 5 minutes by default + topics_cache_ttl_ms: "${TB_QUEUE_KAFKA_TOPICS_CACHE_TTL_MS:300000}" partitions: hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" # murmur3_32, murmur3_128 or sha256 transport_api: diff --git a/transport/snmp/src/main/resources/tb-snmp-transport.yml b/transport/snmp/src/main/resources/tb-snmp-transport.yml index 567654cce4..9dfb9f0b41 100644 --- a/transport/snmp/src/main/resources/tb-snmp-transport.yml +++ b/transport/snmp/src/main/resources/tb-snmp-transport.yml @@ -270,6 +270,8 @@ queue: print-interval-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_MIN_PRINT_INTERVAL_MS:60000}" # Time to wait for the stats-loading requests to Kafka to finis kafka-response-timeout-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_RESPONSE_TIMEOUT_MS:1000}" + # Topics cache TTL in milliseconds. 5 minutes by default + topics_cache_ttl_ms: "${TB_QUEUE_KAFKA_TOPICS_CACHE_TTL_MS:300000}" partitions: hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" # murmur3_32, murmur3_128 or sha256 transport_api: