Browse Source

Merge branch 'rc'

pull/13875/head
Igor Kulikov 10 months ago
parent
commit
256a796898
  1. 16
      rest-client/src/main/java/org/thingsboard/rest/client/RestClient.java
  2. 5
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/ai/TbAiNodeConfiguration.java
  3. 23
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/ai/TbAiNodeTest.java
  4. 25
      ui-ngx/src/app/core/utils.ts
  5. 4
      ui-ngx/src/app/modules/home/components/rule-node/external/ai-config.component.ts
  6. 19
      ui-ngx/src/app/modules/home/components/widget/lib/settings/common/dynamic-form/dynamic-form.component.ts
  7. 611
      ui-ngx/src/assets/locale/locale.constant-da_DK.json
  8. 499
      ui-ngx/src/assets/locale/locale.constant-de_DE.json
  9. 858
      ui-ngx/src/assets/locale/locale.constant-el_GR.json
  10. 4
      ui-ngx/src/assets/locale/locale.constant-en_US.json
  11. 1039
      ui-ngx/src/assets/locale/locale.constant-es_ES.json
  12. 555
      ui-ngx/src/assets/locale/locale.constant-fr_FR.json
  13. 10365
      ui-ngx/src/assets/locale/locale.constant-tr_TR.json

16
rest-client/src/main/java/org/thingsboard/rest/client/RestClient.java

@ -127,6 +127,7 @@ import org.thingsboard.server.common.data.id.WidgetTypeId;
import org.thingsboard.server.common.data.id.WidgetsBundleId;
import org.thingsboard.server.common.data.kv.Aggregation;
import org.thingsboard.server.common.data.kv.AttributeKvEntry;
import org.thingsboard.server.common.data.kv.IntervalType;
import org.thingsboard.server.common.data.kv.TsKvEntry;
import org.thingsboard.server.common.data.mobile.app.MobileApp;
import org.thingsboard.server.common.data.mobile.bundle.MobileAppBundle;
@ -2476,7 +2477,12 @@ public class RestClient implements Closeable {
return getTimeseries(entityId, keys, interval, agg, sortOrder != null ? sortOrder.getDirection() : null, pageLink.getStartTime(), pageLink.getEndTime(), 100, useStrictDataTypes);
}
@Deprecated
public List<TsKvEntry> getTimeseries(EntityId entityId, List<String> keys, Long interval, Aggregation agg, SortOrder.Direction sortOrder, Long startTime, Long endTime, Integer limit, boolean useStrictDataTypes) {
return getTimeseries(entityId, keys, interval, null, null, agg, sortOrder, startTime, endTime, limit, useStrictDataTypes);
}
public List<TsKvEntry> getTimeseries(EntityId entityId, List<String> keys, Long interval, IntervalType intervalType, String timeZone, Aggregation agg, SortOrder.Direction sortOrder, Long startTime, Long endTime, Integer limit, boolean useStrictDataTypes) {
Map<String, String> params = new HashMap<>();
params.put("entityType", entityId.getEntityType().name());
params.put("entityId", entityId.getId().toString());
@ -2490,6 +2496,16 @@ public class RestClient implements Closeable {
StringBuilder urlBuilder = new StringBuilder(baseURL);
urlBuilder.append("/api/plugins/telemetry/{entityType}/{entityId}/values/timeseries?keys={keys}&interval={interval}&limit={limit}&agg={agg}&useStrictDataTypes={useStrictDataTypes}&orderBy={orderBy}");
if (intervalType != null) {
urlBuilder.append("&intervalType={intervalType}");
params.put("intervalType", intervalType.name());
}
if (timeZone != null) {
urlBuilder.append("&timeZone={timeZone}");
params.put("timeZone", timeZone);
}
if (startTime != null) {
urlBuilder.append("&startTs={startTs}");
params.put("startTs", String.valueOf(startTime));

5
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/ai/TbAiNodeConfiguration.java

@ -34,12 +34,11 @@ public class TbAiNodeConfiguration implements NodeConfiguration<TbAiNodeConfigur
@NotNull
private AiModelId modelId;
@Pattern(regexp = ".*\\S.*", message = "must not be blank")
@Length(min = 1, max = 10000)
@Length(min = 1, max = 500_000)
private String systemPrompt;
@NotBlank
@Length(min = 1, max = 10000)
@Length(min = 1, max = 500_000)
private String userPrompt;
@NotNull

23
rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/ai/TbAiNodeTest.java

@ -193,10 +193,9 @@ class TbAiNodeTest {
}
static Stream<Arguments> invalidSystemPrompts() {
String tooLongString = "a".repeat(10_001);
String tooLongString = "a".repeat(500_001);
return Stream.of(
Arguments.of(""),
Arguments.of(" "),
Arguments.of(tooLongString)
);
}
@ -213,12 +212,17 @@ class TbAiNodeTest {
}
static Stream<Arguments> validSystemPrompts() {
String longString = "a".repeat(10_000);
String longString = "a".repeat(500_000);
return Stream.of(
Arguments.of((String) null),
Arguments.of("a"),
Arguments.of("Test system prompt"),
Arguments.of(longString)
Arguments.of(longString),
Arguments.of("""
first sentence
second sentence
""")
);
}
@ -239,7 +243,7 @@ class TbAiNodeTest {
}
static Stream<Arguments> invalidUserPrompts() {
String tooLongString = "a".repeat(10_001);
String tooLongString = "a".repeat(500_001);
return Stream.of(
Arguments.of((String) null),
Arguments.of(""),
@ -260,11 +264,16 @@ class TbAiNodeTest {
}
static Stream<Arguments> validUserPrompts() {
String longString = "a".repeat(10_000);
String longString = "a".repeat(500_000);
return Stream.of(
Arguments.of("a"),
Arguments.of("Test user prompt"),
Arguments.of(longString)
Arguments.of(longString),
Arguments.of("""
first sentence
second sentence
""")
);
}

25
ui-ngx/src/app/core/utils.ts

@ -958,3 +958,28 @@ export const unwrapModule = (module: any) : any => {
return module;
}
};
export const trimDefaultValues = (input: Record<string, any>, defaults: Record<string, any>): Record<string, any> => {
const result: Record<string, any> = {};
for (const key in input) {
if (!(key in defaults)) {
result[key] = input[key];
} else if (typeof defaults[key] === 'object' && defaults[key] !== null && typeof input[key] === 'object' && input[key] !== null) {
const subPatch = trimDefaultValues(input[key], defaults[key]);
if (Object.keys(subPatch).length > 0) {
result[key] = subPatch;
}
} else if (defaults[key] !== input[key]) {
result[key] = input[key];
}
}
for (const key in defaults) {
if (!(key in input)) {
delete result[key];
}
}
return result;
}

4
ui-ngx/src/app/modules/home/components/rule-node/external/ai-config.component.ts

@ -51,8 +51,8 @@ export class AiConfigComponent extends RuleNodeConfigurationComponent {
protected onConfigurationSet(configuration: RuleNodeConfiguration) {
this.aiConfigForm = this.fb.group({
modelId: [configuration?.modelId ?? null, [Validators.required]],
systemPrompt: [configuration?.systemPrompt ?? '', [Validators.maxLength(10000), Validators.pattern(/.*\S.*/)]],
userPrompt: [configuration?.userPrompt ?? '', [Validators.required, Validators.maxLength(10000), Validators.pattern(/.*\S.*/)]],
systemPrompt: [configuration?.systemPrompt ?? '', [Validators.maxLength(500_000), Validators.pattern(/.*\S.*/)]],
userPrompt: [configuration?.userPrompt ?? '', [Validators.required, Validators.maxLength(500_000), Validators.pattern(/.*\S.*/)]],
responseFormat: this.fb.group({
type: [configuration?.responseFormat?.type ?? ResponseFormat.JSON, []],
schema: [configuration?.responseFormat?.schema ?? null, [jsonRequired]],

19
ui-ngx/src/app/modules/home/components/widget/lib/settings/common/dynamic-form/dynamic-form.component.ts

@ -37,7 +37,7 @@ import {
} from '@angular/forms';
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { isDefinedAndNotNull, mergeDeep } from '@core/utils';
import { isDefinedAndNotNull, mergeDeep, trimDefaultValues } from '@core/utils';
import {
defaultFormProperties,
FormProperty,
@ -106,10 +106,16 @@ export class DynamicFormComponent implements OnInit, OnChanges, ControlValueAcce
@coerceBoolean()
noBorder = false;
@Input()
@coerceBoolean()
trimDefaults = false;
private modelValue: {[id: string]: any};
private propagateChange = null;
private defaults: {[id: string]: any};
private validatorTriggers: string[];
public propertiesFormGroup: UntypedFormGroup;
@ -180,11 +186,13 @@ export class DynamicFormComponent implements OnInit, OnChanges, ControlValueAcce
private loadMetadata() {
this.validatorTriggers = [];
this.propertyGroups = [];
this.defaults = {};
for (const control of Object.keys(this.propertiesFormGroup.controls)) {
this.propertiesFormGroup.removeControl(control, {emitEvent: false});
}
if (this.properties) {
this.defaults = defaultFormProperties(this.properties);
for (let property of this.properties) {
property.disabled = false;
property.visible = true;
@ -282,8 +290,7 @@ export class DynamicFormComponent implements OnInit, OnChanges, ControlValueAcce
private setupValue() {
if (this.properties) {
const defaults = defaultFormProperties(this.properties);
this.modelValue = mergeDeep<{[id: string]: any}>(defaults, this.modelValue);
this.modelValue = mergeDeep<{[id: string]: any}>({}, this.defaults, this.modelValue);
this.propertiesFormGroup.patchValue(
this.modelValue, {emitEvent: false}
);
@ -295,7 +302,11 @@ export class DynamicFormComponent implements OnInit, OnChanges, ControlValueAcce
private updateModel() {
this.modelValue = this.propertiesFormGroup.getRawValue();
this.calculateControlsState(true);
this.propagateChange(this.modelValue);
let result = this.modelValue;
if (this.trimDefaults) {
result = trimDefaultValues(this.modelValue, this.defaults);
}
this.propagateChange(result);
}
}

611
ui-ngx/src/assets/locale/locale.constant-da_DK.json

File diff suppressed because it is too large

499
ui-ngx/src/assets/locale/locale.constant-de_DE.json

@ -545,7 +545,13 @@
"slack-settings": "Slack-Einstellungen",
"mobile-settings": "Mobile Einstellungen",
"firebase-service-account-file": "Firebase-Service-Konto-Anmeldeinformationen (JSON-Datei)",
"select-firebase-service-account-file": "Ziehen Sie Ihre Firebase-Service-Konto-Datei hierher oder "
"select-firebase-service-account-file": "Ziehen Sie Ihre Firebase-Service-Konto-Datei hierher oder ",
"trendz": "Trendz",
"trendz-settings": "Trendz-Einstellungen",
"trendz-url": "Trendz-URL",
"trendz-url-required": "Trendz-URL ist erforderlich",
"trendz-api-key": "Trendz-API-Schlüssel",
"trendz-enable": "Trendz aktivieren"
},
"alarm": {
"alarm": "Alarm",
@ -677,8 +683,8 @@
"filter-type-entity-list": "Entitätsliste",
"filter-type-entity-name": "Entitätsname",
"filter-type-entity-type": "Entitätstyp",
"filter-type-state-entity": "Entität aus Dashboard-Zustand",
"filter-type-state-entity-description": "Entität aus Dashboard-Zustandsparametern",
"filter-type-state-entity": "Entität aus dem Dashboard-Zustand",
"filter-type-state-entity-description": "Entität, die aus den Dashboard-Zustandsparametern stammt",
"filter-type-asset-type": "Asset-Typ",
"filter-type-asset-type-description": "Assets vom Typ '{{assetTypes}}'",
"filter-type-asset-type-and-name-description": "Assets vom Typ '{{assetTypes}}' mit Namen beginnend mit '{{prefix}}'",
@ -709,12 +715,13 @@
"filter-type-required": "Filtertyp ist erforderlich.",
"entity-filter-no-entity-matched": "Keine Entitäten entsprechen dem angegebenen Filter.",
"no-entity-filter-specified": "Kein Entitätsfilter angegeben",
"root-state-entity": "Dashboard-Zustandsentität als Root verwenden",
"root-state-entity": "Dashboard-Zustandsentität als Wurzel verwenden",
"last-level-relation": "Nur letzte Beziehungsebene abrufen",
"root-entity": "Root-Entität",
"root-entity": "Wurzelentität",
"state-entity-parameter-name": "Parametername der Zustandsentität",
"default-state-entity": "Standard-Zustandsentität",
"default-entity-parameter-name": "Standardmäßig",
"query-options": "Abfrageoptionen",
"max-relation-level": "Maximale Beziehungsebene",
"unlimited-level": "Unbegrenzte Ebene",
"state-entity": "Dashboard-Zustandsentität",
@ -917,18 +924,23 @@
"view-statistics": "Statistiken anzeigen"
},
"api-limit": {
"cassandra-queries": "Cassandra-Abfragen",
"cassandra-write-queries-core": "REST-API Cassandra-Schreibabfragen",
"cassandra-read-queries-core": "REST-API- und WS-Telemetrie Cassandra-Leseabfragen",
"cassandra-write-queries-rule-engine": "Rule Engine Telemetrie Cassandra-Schreibabfragen",
"cassandra-read-queries-rule-engine": "Rule Engine Telemetrie Cassandra-Leseabfragen",
"cassandra-write-queries-monolith": "Monolith Telemetrie Cassandra-Schreibabfragen",
"cassandra-read-queries-monolith": "Monolith Telemetrie Cassandra-Leseabfragen",
"entity-version-creation": "Erstellung von Entitätsversionen",
"entity-version-load": "Laden von Entitätsversionen",
"notification-requests": "Benachrichtigungsanforderungen",
"notification-requests-per-rule": "Benachrichtigungsanforderungen pro Regel",
"notification-requests": "Benachrichtigungsanfragen",
"notification-requests-per-rule": "Benachrichtigungsanfragen pro Regel",
"rest-api-requests": "REST-API-Anfragen",
"rest-api-requests-per-customer": "REST-API-Anfragen pro Kunde",
"transport-messages": "Transportnachrichten",
"transport-messages-per-device": "Transportnachrichten pro Gerät",
"transport-messages-per-gateway": "Transportnachrichten pro Gateway",
"transport-messages-per-gateway-device": "Transportnachrichten pro Gateway-Gerät",
"ws-updates-per-session": "WebSocket-Aktualisierungen pro Sitzung",
"ws-updates-per-session": "WS-Updates pro Sitzung",
"edge-events": "Edge-Ereignisse",
"edge-events-per-edge": "Edge-Ereignisse pro Edge",
"edge-uplink-messages": "Edge-Uplink-Nachrichten",
@ -1057,6 +1069,7 @@
"delete-multiple-title": "Möchten Sie { count, plural, =1 {1 berechnetes Feld} other {# berechnete Felder} } wirklich löschen?",
"delete-multiple-text": "Vorsicht, nach der Bestätigung werden alle ausgewählten berechneten Felder entfernt und alle zugehörigen Daten unwiederbringlich gelöscht.",
"test-with-this-message": "Mit dieser Nachricht testen",
"use-latest-timestamp": "Letzten Zeitstempel verwenden",
"hint": {
"arguments-simple-with-rolling": "Einfacher Feldtyp darf keine Schlüssel mit Zeitreihen-Rollup-Typ enthalten.",
"arguments-empty": "Argumente dürfen nicht leer sein.",
@ -1072,9 +1085,87 @@
"max-args": "Maximale Anzahl an Argumenten erreicht.",
"decimals-range": "Standard-Dezimalstellen sollten eine Zahl zwischen 0 und 15 sein.",
"expression": "Standardausdruck demonstriert, wie eine Temperatur von Fahrenheit in Celsius umgewandelt wird.",
"arguments-entity-not-found": "Zielentität des Arguments nicht gefunden."
"arguments-entity-not-found": "Zielentität des Arguments nicht gefunden.",
"use-latest-timestamp": "Wenn aktiviert, wird der berechnete Wert mit dem neuesten Zeitstempel aus der Telemetrie der Argumente gespeichert, anstatt mit der Serverzeit."
}
},
"ai-models": {
"ai-models": "KI-Modelle",
"ai-model": "KI-Modell",
"model": "Modell",
"name": "Name",
"ai-provider": "KI-Anbieter",
"no-found": "Keine KI-Modelle gefunden",
"list": "{ count, plural, =1 {Ein Modell} other {Liste von # Modellen} }",
"selected-fields": "{ count, plural, =1 {1 Modell} other {# Modelle} } ausgewählt",
"add": "Modell hinzufügen",
"delete-model-title": "Sind Sie sicher, dass Sie das Modell '{{modelName}}' löschen möchten?",
"delete-model-text": "Achtung, nach der Bestätigung wird das Modell und alle zugehörigen Daten unwiederbringlich gelöscht.",
"delete-models-title": "Sind Sie sicher, dass Sie { count, plural, =1 {1 Modell} other {# Modelle} } löschen möchten?",
"delete-models-text": "Achtung, nach der Bestätigung werden alle ausgewählten Modelle entfernt und alle zugehörigen Daten unwiederbringlich gelöscht.",
"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-Modelle"
},
"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.",
"project-id": "Projekt-ID",
"project-id-required": "Projekt-ID ist erforderlich.",
"location": "Standort",
"location-required": "Standort ist erforderlich.",
"service-account-key-file": "Dienstkontoschlüssel-Datei",
"service-account-key-file-required": "Dienstkontoschlüssel-Datei ist erforderlich.",
"no-file": "Keine Datei ausgewählt.",
"drop-file": "Datei ablegen oder klicken, um eine Datei auszuwählen.",
"personal-access-token": "Persönlicher Zugriffstoken",
"personal-access-token-required": "Persönlicher Zugriffstoken ist erforderlich.",
"configuration": "Konfiguration",
"model-id": "Modell-ID",
"model-id-required": "Modell-ID ist erforderlich.",
"deployment-name": "Bereitstellungsname",
"deployment-name-required": "Bereitstellungsname ist erforderlich.",
"set": "Festlegen",
"region": "Region",
"region-required": "Region ist erforderlich.",
"access-key-id": "Access Key ID",
"access-key-id-required": "Access Key ID ist erforderlich.",
"secret-access-key": "Secret Access Key",
"secret-access-key-required": "Secret Access Key ist erforderlich.",
"temperature": "Temperatur",
"temperature-hint": "Reguliert den Grad der Zufälligkeit im Modellausgang. Höhere Werte erhöhen die Zufälligkeit, niedrigere verringern sie.",
"temperature-min": "Muss 0 oder größer sein.",
"top-p": "Top P",
"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-min": "Muss 0 oder größer sein.",
"presence-penalty": "Strafe für Anwesenheit",
"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.",
"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.",
"endpoint": "Endpunkt",
"endpoint-required": "Endpunkt 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.",
"model-required": "Modell ist erforderlich.",
"no-model-text": "Keine Modelle gefunden."
},
"confirm-on-exit": {
"message": "Sie haben ungespeicherte Änderungen. Möchten Sie diese Seite wirklich verlassen?",
"html-message": "Sie haben ungespeicherte Änderungen.<br/>Möchten Sie diese Seite wirklich verlassen?",
@ -1754,6 +1845,7 @@
"selected-options-limit": "Auswahloptionen Limit",
"advanced-ui-settings": "Erweiterte UI-Einstellungen",
"disable-on-property": "Bei Eigenschaft deaktivieren",
"disable-on-property-none": "Keine (Feld immer aktiviert)",
"display-condition-function": "Anzeigebedingungsfunktion",
"sub-label": "Unterbezeichnung",
"vertical-divider-after": "Vertikale Trennlinie danach",
@ -1787,7 +1879,8 @@
"array-item": "Array-Element",
"item-type": "Elementtyp",
"item-name": "Elementname",
"no-items": "Keine Elemente"
"no-items": "Keine Elemente",
"support-unit-conversion": "Unterstützt Einheitenumrechnung"
},
"clear-form": "Formular löschen",
"clear-form-prompt": "Möchten Sie wirklich alle Formulareigenschaften entfernen?",
@ -1911,6 +2004,7 @@
"mqtt-use-json-format-for-default-downlink-topics-hint": "Wenn aktiviert, wird das JSON-Format für die Standard-Downlink-Themen verwendet, z.B.: <b>v1/devices/me/attributes/response/$request_id</b>. 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-protocol-version": "Protokollversion",
"snmp-add-mapping": "SNMP-Zuordnung hinzufügen",
"snmp-mapping-not-configured": "Keine Zuordnung für OID zu Zeitreihen/Telemetrie konfiguriert",
"snmp-timseries-or-attribute-name": "Zeitreihe/Attributname für Zuordnung",
@ -2171,6 +2265,9 @@
"add-lwm2m-server-config": "LwM2M-Server hinzufügen",
"no-config-servers": "Keine Server konfiguriert",
"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",
"client-strategy-label": "Strategie",
"client-strategy-only-observe": "Nur Beobachtungsanfragen nach der ersten Verbindung",
@ -2201,7 +2298,17 @@
"default-object-id": "Standardobjektversion (Attribut)",
"default-object-id-ver": {
"v1-0": "1.0",
"v1-1": "1.1"
"v1-1": "1.1",
"v1-2": "1.2"
},
"observe-strategy": {
"observe-strategy": "Beobachtungsstrategie",
"single": "Einzeln",
"single-description": "Eine Beobachtungsanfrage pro Ressource (höhere Präzision, mehr Netzwerkverkehr)",
"composite-all": "Komplett zusammengefasst",
"composite-all-description": "Alle Ressourcen werden mit einer einzigen zusammengefassten Beobachtungsanfrage überwacht (effizienter, weniger flexibel)",
"composite-by-object": "Nach Objekten zusammengefasst",
"composite-by-object-description": "Ressourcen werden nach Objekttyp gruppiert und mit separaten zusammengefassten Beobachtungsanfragen überwacht (ausgewogener Ansatz)"
}
},
"snmp": {
@ -2524,6 +2631,8 @@
"type-current-user-owner": "Aktueller Benutzerinhaber",
"type-calculated-field": "Berechnetes Feld",
"type-calculated-fields": "Berechnete Felder",
"type-ai-model": "KI-Modell",
"type-ai-models": "KI-Modelle",
"type-widgets-bundle": "Widget-Bündel",
"type-widgets-bundles": "Widget-Bündel",
"list-of-widgets-bundles": "{ count, plural, =1 {Ein Widget-Bündel} other {Liste von # Widget-Bündeln} }",
@ -2553,6 +2662,8 @@
"type-tb-resources": "Ressourcen",
"list-of-tb-resources": "{ count, plural, =1 {Eine Ressource} other {Liste von # Ressourcen} }",
"type-ota-package": "OTA-Paket",
"type-ota-packages": "OTA-Pakete",
"list-of-ota-packages": "{ count, plural, =1 {Ein OTA-Paket} other {Liste von # OTA-Paketen} }",
"type-rpc": "RPC",
"type-queue": "Warteschlange",
"type-queue-stats": "Warteschlangenstatistiken",
@ -2933,11 +3044,12 @@
"duplicate-filter": "Ein Filter mit demselben Namen existiert bereits.",
"filters": "Filter",
"unable-delete-filter-title": "Filter kann nicht gelöscht werden",
"unable-delete-filter-text": "Filter '{{filter}}' kann nicht gelöscht werden, da er von folgendem/n Widget(s) verwendet wird:<br/>{{widgetsList}}",
"duplicate-filter-error": "Doppelter Filter gefunden '{{filter}}'.<br/>Filter müssen innerhalb des Dashboards eindeutig sein.",
"missing-key-filters-error": "Schlüsselfilter fehlen für Filter '{{filter}}'.",
"unable-delete-filter-text": "Der Filter '{{filter}}' kann nicht gelöscht werden, da er von folgenden Widget(s) verwendet wird:<br/>{{widgetsList}}",
"duplicate-filter-error": "Doppelter Filter gefunden '{{filter}}'.<br>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.",
"no-filters-found": "Keine Filter gefunden.",
"no-filter-text": "Kein Filter angegeben",
"add-filter-prompt": "Bitte Filter hinzufügen",
@ -2977,6 +3089,8 @@
"filter-user-params": "Filterprädikat-Benutzerparameter",
"user-parameters": "Benutzerparameter",
"display-label": "Anzeigebezeichnung",
"custom-label": "Benutzerdefiniertes Label",
"custom-label-hint": "Aktivieren Sie diese Option, um ein eigenes Label für den Filter festzulegen. Wenn deaktiviert, wird automatisch ein Label generiert.",
"order-priority": "Priorität der Feldreihenfolge",
"key-filter": "Schlüsselfilter",
"key-filters": "Schlüsselfilter",
@ -3021,7 +3135,8 @@
"switch-to-dynamic-value": "Auf dynamischen Wert umschalten",
"switch-to-default-value": "Auf Standardwert umschalten",
"inherit-owner": "Vom Eigentümer übernehmen",
"source-attribute-not-set": "Falls Quellattribut nicht gesetzt ist"
"source-attribute-not-set": "Falls Quellattribut nicht gesetzt ist",
"unit": "Einheit"
},
"fullscreen": {
"expand": "Auf Vollbildmodus erweitern",
@ -3406,6 +3521,7 @@
"power-button-background": "Hintergrund des Netzschalters",
"value-box-background": "Hintergrund der Wertbox",
"value-units": "Werteinheiten",
"enable-units-scale": "Einheiten auf Skala aktivieren",
"filtration-mode": "Filtrationsmodus",
"filtration-mode-hint": "Ganzzahlige Angabe des aktuellen Filtrationsmodus.",
"filtration-mode-update": "Filtrationsmodus-Aktualisierung",
@ -3722,6 +3838,8 @@
"mobile-package-max-length": "Anwendungspaket sollte weniger als 256 Zeichen enthalten",
"mobile-package-required": "Anwendungspaket ist erforderlich.",
"mobile-package-pattern": "Ungültiges Format des Anwendungspakets",
"mobile-package-title": "Anwendungstitel",
"mobile-package-title-max-length": "Der Anwendungstitel sollte weniger als 256 Zeichen umfassen",
"no-application": "Keine Anwendungen gefunden",
"no-bundles": "Keine Bundles gefunden",
"platform-type": "Plattformtyp",
@ -3802,20 +3920,16 @@
"configuration-app": "Konfigurations-App",
"configuration-step": {
"prepare-environment-title": "Entwicklungsumgebung vorbereiten",
"prepare-environment-text": "Für die ThingsBoard Flutter Mobile App wird das Flutter SDK benötigt. Folgen Sie den Anweisungen zur Einrichtung des Flutter SDK.",
"get-source-code-title": "Quellcode der App erhalten",
"get-source-code-text": "Sie können den Quellcode der ThingsBoard Flutter Mobile App durch Klonen des GitHub-Repositories erhalten:",
"configure-api-title": "ThingsBoard API-Endpunkt konfigurieren",
"configure-api-text": "Öffnen Sie das Projekt 'flutter_thingsboard_pe_app' in Ihrem Editor/IDE. Bearbeiten Sie:",
"configure-api-hint": "Setzen Sie den Wert der Konstante 'thingsBoardApiEndpoint' entsprechend dem API-Endpunkt Ihrer ThingsBoard-Instanz. Verwenden Sie keine Hostnamen wie „localhost“ oder „127.0.0.1“.",
"prepare-environment-text": "Die Flutter ThingsBoard Mobile App erfordert das Flutter SDK. Befolgen Sie die Anweisungen zur Einrichtung des Flutter SDK.",
"get-source-code-title": "App-Quellcode beziehen",
"get-source-code-text": "Sie können den Quellcode der Flutter ThingsBoard Mobile App durch Klonen aus dem GitHub-Repository beziehen:",
"configure-app-settings-title": "App-Einstellungen konfigurieren",
"configure-app-settings-text": "Laden Sie die Konfigurationsdatei herunter und platzieren Sie sie im Stammverzeichnis des Projekts, das Sie im vorherigen Schritt geklont haben.",
"download-file": "Datei herunterladen",
"run-app-title": "App ausführen",
"run-app-text": "Führen Sie die App wie in Ihrer IDE beschrieben aus.\nWenn Sie das Terminal verwenden, führen Sie folgenden Befehl aus:",
"more-information": "Detaillierte Informationen finden Sie in unserer Einstiegsdokumentation.",
"getting-started": "Erste Schritte",
"configure-package-title": "Anwendungspaket konfigurieren",
"configure-package-text": "Sie können das Anwendungspaket manuell ändern oder ein CLI-Tool eines Drittanbieters verwenden.",
"configure-package-text-install": "Um das Rename CLI Tool zu installieren, führen Sie folgenden Befehl aus:",
"configure-package-run-commands": "Führen Sie diese Befehle im Stammverzeichnis Ihres Projekts aus:"
"run-app-text": "Führen Sie die App wie in Ihrer IDE beschrieben aus.\nWenn Sie das Terminal verwenden, führen Sie die App mit folgendem Befehl aus:",
"more-information": "Detaillierte Informationen finden Sie in unserer Erste-Schritte-Dokumentation.",
"getting-started": "Erste Schritte"
}
},
"notification": {
@ -3839,6 +3953,7 @@
"new-platform-version-trigger-settings": "Neue Plattformversion Auslöser-Einstellungen",
"rate-limits-trigger-settings": "Auslöser für überschrittene Ratenlimits",
"task-processing-failure-trigger-settings": "Aufgabenverarbeitungsfehler Auslöser-Einstellungen",
"resources-shortage-trigger-settings": "Auslöseeinstellungen bei Ressourcenknappheit",
"at-least-one-should-be-selected": "Mindestens eine Auswahl muss getroffen werden",
"basic-settings": "Grundeinstellungen",
"button-text": "Schaltflächentext",
@ -3853,6 +3968,7 @@
"create-new": "Neu erstellen",
"created": "Erstellt",
"customize-messages": "Nachrichten anpassen",
"cpu-threshold": "CPU-Schwellenwert",
"delete-notification-text": "Seien Sie vorsichtig, nach der Bestätigung ist die Benachrichtigung nicht wiederherstellbar.",
"delete-notification-title": "Sind Sie sicher, dass Sie die Benachrichtigung löschen möchten?",
"delete-notifications-text": "Seien Sie vorsichtig, nach der Bestätigung sind die Benachrichtigungen nicht wiederherstellbar.",
@ -3919,6 +4035,7 @@
"input-fields-support-templatization": "Eingabefelder unterstützen Templatisierung.",
"link": "Link",
"link-required": "Link ist erforderlich",
"link-max-length": "Der Link darf maximal {{ length }} Zeichen lang sein",
"link-type": {
"dashboard": "Dashboard öffnen",
"link": "URL-Link öffnen"
@ -3945,6 +4062,7 @@
"no-severity-found": "Keine Schwere gefunden",
"no-severity-matching": "'{{severity}}' nicht gefunden.",
"no-template-matching": "Keine Ressource passend zu '{{template}}' gefunden.",
"create-new-template": "Erstellen Sie eine neue!",
"not-found-slack-recipient": "Slack-Empfänger nicht gefunden",
"notification": "Benachrichtigung",
"notification-center": "Benachrichtigungszentrale",
@ -3968,6 +4086,7 @@
"only-rule-chain-lifecycle-failures": "Nur Lebenszyklusfehler von Regelketten",
"only-rule-node-lifecycle-failures": "Nur Lebenszyklusfehler von Regelknoten",
"platform-users": "Plattformbenutzer",
"ram-threshold": "RAM-Schwellenwert",
"rate-limits": "Ratenbegrenzungen",
"rate-limits-hint": "Wenn das Feld leer ist, wird der Auslöser auf alle Ratenbegrenzungen angewendet",
"recipient": "Empfänger",
@ -4033,6 +4152,7 @@
"start-from-scratch": "Von vorne beginnen",
"status": "Status",
"stop-escalation-alarm-status-become": "Eskalation beenden, wenn Alarmstatus wird zu:",
"storage-threshold": "Speicher-Schwellenwert",
"subject": "Betreff",
"subject-required": "Betreff ist erforderlich",
"subject-max-length": "Betreff sollte höchstens {{ length }} Zeichen lang sein",
@ -4048,13 +4168,14 @@
"entities-limit": "Entitätenlimit",
"entity-action": "Entitätsaktion",
"general": "Allgemein",
"rule-engine-lifecycle-event": "Regelmaschinenlebenszyklusereignis",
"rule-node": "Regelknoten",
"rule-engine-lifecycle-event": "Lebenszyklusereignis der Rule Engine",
"rule-node": "Rule Node",
"new-platform-version": "Neue Plattformversion",
"rate-limits": "Überschrittene Ratenlimits",
"rate-limits": "Rate-Limits überschritten",
"edge-communication-failure": "Edge-Kommunikationsfehler",
"edge-connection": "Edge-Verbindung",
"task-processing-failure": "Fehler bei der Aufgabenverarbeitung"
"task-processing-failure": "Fehler bei der Aufgabenverarbeitung",
"resources-shortage": "Ressourcenknappheit"
},
"templates": "Vorlagen",
"notification-templates": "Benachrichtigungen / Vorlagen",
@ -4072,12 +4193,13 @@
"device-activity": "Geräteaktivität",
"entities-limit": "Entitätenlimit",
"entity-action": "Entitätsaktion",
"rule-engine-lifecycle-event": "Regelmaschinenlebenszyklusereignis",
"rule-engine-lifecycle-event": "Lebenszyklusereignis der Rule Engine",
"new-platform-version": "Neue Plattformversion",
"rate-limits": "Überschrittene Ratenlimits",
"rate-limits": "Rate-Limits überschritten",
"edge-connection": "Edge-Verbindung",
"edge-communication-failure": "Edge-Kommunikationsfehler",
"task-processing-failure": "Fehler bei der Aufgabenverarbeitung",
"resources-shortage": "Ressourcenknappheit",
"trigger": "Auslöser",
"trigger-required": "Auslöser ist erforderlich"
},
@ -4119,6 +4241,7 @@
"checksum-copied-message": "Paket-Prüfsumme wurde in die Zwischenablage kopiert",
"change-firmware": "Die Änderung der Firmware kann ein Update von { count, plural, =1 {1 Gerät} other {# Geräten} } verursachen.",
"change-software": "Die Änderung der Software kann ein Update von { count, plural, =1 {1 Gerät} other {# Geräten} } verursachen.",
"change-ota-setting-title": "Sind Sie sicher, dass Sie die OTA-Einstellungen ändern möchten?",
"chose-compatible-device-profile": "Das hochgeladene Paket ist nur für Geräte mit dem ausgewählten Profil verfügbar.",
"chose-firmware-distributed-device": "Firmware auswählen, die auf die Geräte verteilt wird",
"chose-software-distributed-device": "Software auswählen, die auf die Geräte verteilt wird",
@ -4314,6 +4437,7 @@
"add-relation-filter": "Beziehungsfilter hinzufügen",
"any-relation": "Beliebige Beziehung",
"relation-filters": "Beziehungsfilter",
"relation-filter": "Beziehungsfilter",
"additional-info": "Zusätzliche Informationen (JSON)",
"invalid-additional-info": "Zusätzliche Info-JSON kann nicht geparst werden.",
"no-relations-text": "Keine Beziehungen gefunden",
@ -4635,7 +4759,7 @@
"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 zum Kopieren nach Muster.\n\nTipps:\nEnter = Eingabe abschließen\nBackspace = löschen\nMehrere Felder erlaubt.",
"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.",
"interval": "Intervall",
"interval-required": "Intervall ist erforderlich",
"interval-hint": "Deduplizierungsintervall in Sekunden.",
@ -4889,9 +5013,9 @@
"connect-timeout-required": "Verbindungs-Timeout ist erforderlich.",
"connect-timeout-range": "Verbindungs-Timeout muss im Bereich von 1 bis 200 liegen.",
"client-id": "Client-ID",
"client-id-hint": "Optional. Leer lassen für automatisch generierte Client-ID. Vorsicht beim Festlegen der Client-ID: Die meisten MQTT-Broker erlauben keine mehrfachen Verbindungen mit derselben Client-ID. Um mit solchen Brokern zu verbinden, muss deine MQTT-Client-ID eindeutig sein. Wenn die Plattform im Microservice-Modus betrieben wird, wird eine Kopie des Regelknotens in jedem Microservice gestartet. Dies führt automatisch zu mehreren MQTT-Clients mit derselben ID und kann zu Fehlern führen. Um dies zu vermeiden, aktiviere die Option „Dienst-ID als Suffix zur Client-ID hinzufügen“ unten.",
"client-id-hint": "Optional. Leer lassen für automatisch generierte Client-ID. Vorsicht beim Festlegen der Client-ID: Die meisten MQTT-Broker erlauben keine mehrfachen Verbindungen mit derselben Client-ID. Um mit solchen Brokern zu verbinden, muss deine MQTT-Client-ID eindeutig sein. Wenn die Plattform im Microservice-Modus betrieben wird, wird eine Kopie des Regelknotens in jedem Microservice gestartet. Dies führt automatisch zu mehreren MQTT-Clients mit derselben ID und kann zu Fehlern führen. Um dies zu vermeiden, aktiviere die Option \"Dienst-ID als Suffix zur Client-ID hinzufügen\" unten.",
"append-client-id-suffix": "Dienst-ID als Suffix zur Client-ID hinzufügen",
"client-id-suffix-hint": "Optional. Wird angewendet, wenn die „Client-ID“ explizit angegeben wurde. Falls ausgewählt, wird die Dienst-ID als Suffix zur Client-ID hinzugefügt. Hilft Fehler zu vermeiden, wenn die Plattform im Microservice-Modus läuft.",
"client-id-suffix-hint": "Optional. Wird angewendet, wenn die \"Client ID\" explizit angegeben ist. Falls ausgewählt, wird die Service-ID als Suffix zur Client-ID hinzugefügt. Dies hilft, Fehler zu vermeiden, wenn die Plattform im Microservices-Modus betrieben wird.",
"device-id": "Geräte-ID",
"device-id-required": "Geräte-ID ist erforderlich.",
"clean-session": "Saubere Sitzung",
@ -5304,6 +5428,36 @@
"html-text-description": "Ermöglicht HTML-Tags zur Formatierung, für Links und Bilder im Nachrichtentext.",
"dynamic-text-description": "Erlaubt die dynamische Verwendung von reinem Text oder HTML basierend auf der Templating-Funktion.",
"after-template-evaluation-hint": "Nach der Template-Auswertung muss der Wert true für HTML und false für reinen Text sein."
},
"ai": {
"ai-model": "KI-Modell",
"model": "Modell",
"ai-model-hint": "Wählen Sie das vorkonfigurierte KI-Modell zur Verarbeitung der von diesem Rule Node gesendeten Anfragen aus, oder verwenden Sie „Neu erstellen“, um ein neues zu konfigurieren.",
"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-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-blank": "Der Benutzer-Prompt darf nicht leer sein.",
"response-format": "Antwortformat",
"response-text": "Text",
"response-json": "JSON",
"response-json-schema": "JSON-Schema",
"response-format-hint-TEXT": "Erlaubt dem Modell, beliebigen Text zu generieren, der möglicherweise kein gültiges JSON-Objekt ist. Ist die Ausgabe kein gültiges JSON, wird sie automatisch in ein JSON-Objekt unter dem Schlüssel \"response\" eingebettet.",
"response-format-hint-JSON": "Das Modell muss eine gültige JSON-Antwort erzeugen. Ist die Ausgabe kein gültiges JSON-Objekt, wird sie automatisch unter dem Schlüssel \"response\" eingebettet.",
"response-format-hint-JSON_SCHEMA": "Das Modell muss ein JSON erzeugen, das der im bereitgestellten Schema definierten Struktur und den Datentypen entspricht. Ist das Ergebnis kein gültiges JSON-Objekt, wird es automatisch unter dem Schlüssel \"response\" eingebettet.",
"response-json-schema-hint": "Obwohl jedes gültige JSON-Schema eingegeben werden kann, unterstützt dieser Rule Node nur einen begrenzten Funktionsumfang. Details finden Sie in der Dokumentation des Nodes.",
"response-json-schema-required": "JSON-Schema ist erforderlich",
"advanced-settings": "Erweiterte Einstellungen",
"timeout": "Zeitüberschreitung",
"timeout-hint": "Maximale Zeit, die auf eine Antwort \nvom KI-Modell gewartet wird, bevor die Anfrage abgebrochen wird.",
"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."
}
},
"timezone": {
@ -5625,7 +5779,10 @@
"too-small-value-zero": "Der Wert muss größer als 0 sein",
"too-small-value-one": "Der Wert muss größer als 1 sein",
"queue-size-is-limited-by-system-configuration": "Die Größe der Warteschlange ist auch durch die Systemkonfiguration begrenzt.",
"cassandra-tenant-limits-configuration": "Cassandra-Abfrage für Mieter",
"cassandra-write-tenant-core-limits-configuration": "REST-API Cassandra-Schreibabfragen",
"cassandra-read-tenant-core-limits-configuration": "REST-API- und WS-Telemetrie Cassandra-Leseabfragen",
"cassandra-write-tenant-rule-engine-limits-configuration": "Rule Engine Telemetrie Cassandra-Schreibabfragen",
"cassandra-read-tenant-rule-engine-limits-configuration": "Rule Engine-Telemetrie-Cassandra-Leseabfragen",
"ws-limit-max-sessions-per-tenant": "Maximale Sitzungen pro Mieter",
"ws-limit-max-sessions-per-customer": "Maximale Sitzungen pro Kunde",
"ws-limit-max-sessions-per-regular-user": "Maximale Sitzungen pro normalem Benutzer",
@ -5638,6 +5795,7 @@
"ws-limit-updates-per-session": "WebSocket-Aktualisierungen pro Sitzung",
"rate-limits": {
"add-limit": "Limit hinzufügen",
"and-also-less-than": "und außerdem kleiner als",
"advanced-settings": "Erweiterte Einstellungen",
"edit-limit": "Limit bearbeiten",
"calculated-field-debug-event-rate-limit": "Berechnete Feld-Debug-Ereignisse",
@ -5657,7 +5815,10 @@
"edit-tenant-rest-limits-title": "REST-Anfragelimits für Mieter bearbeiten",
"edit-customer-rest-limits-title": "REST-Anfragelimits für Kunden bearbeiten",
"edit-ws-limit-updates-per-session-title": "Limit für WebSocket-Aktualisierungen pro Sitzung bearbeiten",
"edit-cassandra-tenant-limits-configuration-title": "Cassandra-Abfrage-Limits für Mieter bearbeiten",
"edit-cassandra-write-tenant-core-limits-configuration": "REST-API Cassandra-Schreibabfragen bearbeiten",
"edit-cassandra-read-tenant-core-limits-configuration": "REST-API- und WS-Telemetrie Cassandra-Leseabfragen bearbeiten",
"edit-cassandra-write-tenant-rule-engine-limits-configuration": "Rule Engine Telemetrie Cassandra-Schreibabfragen bearbeiten",
"edit-cassandra-read-tenant-rule-engine-limits-configuration": "Rule Engine Telemetrie Cassandra-Leseabfragen bearbeiten",
"edit-tenant-entity-export-rate-limit-title": "Limit für Entitätsversionserstellung bearbeiten",
"edit-tenant-entity-import-rate-limit-title": "Limit für Entitätsversionsladevorgang bearbeiten",
"edit-tenant-notification-request-rate-limit-title": "Limit für Benachrichtigungsanfragen bearbeiten",
@ -5679,6 +5840,7 @@
"per-seconds": "Pro Sekunde",
"per-seconds-required": "Zeitintervall ist erforderlich.",
"per-seconds-min": "Minimalwert ist 1.",
"per-seconds-duplicate": "Doppelte Zeitrate. Jeder Zeitintervall muss eindeutig sein.",
"rate-limits": "Ratenlimits",
"remove-limit": "Limit entfernen",
"transport-tenant-msg": "Transport-Mieter-Nachrichten",
@ -5827,12 +5989,124 @@
"date": "Datum",
"show-date-time-interval": "Datum/Zeit-Intervall anzeigen",
"show-date-time-interval-hint": "Datum/Zeit-Intervall gemäß Datenaggregation anzeigen.",
"hide-zero-tooltip-values": "Nullwerte ausblenden",
"background-color": "Hintergrundfarbe",
"background-blur": "Hintergrundunschärfe"
},
"unit": {
"set-unit-conversion": "Einheitenumrechnung festlegen",
"unit-settings": {
"unit-settings": "Einheitseinstellungen",
"source-unit": "Ausgangseinheit",
"source-unit-hint": "Dies ist die Einheit des gespeicherten Wertes. Die Einheit, aus der konvertiert wird. Geben Sie das Symbol ein, das Ihre Quelldaten verwenden (z. B. m, km, ft, in).",
"target-metric-unit": "Ziel-Metrikeinheit",
"target-metric-unit-hint": "Wählen Sie die Metrikeinheit (SI), in die Ihr Quellwert umgerechnet werden soll (z. B. cm, mm, km).",
"target-imperial-unit": "Ziel-Imperialeinheit",
"target-imperial-unit-hint": "Wählen Sie die Imperialeinheit, in die Ihr Quellwert umgerechnet werden soll (z. B. in, ft, yd).",
"target-hybrid-unit": "Ziel-Hybrideinheit",
"target-hybrid-unit-hint": "Wählen Sie die Hybrideinheit, in die Ihr Quellwert umgerechnet werden soll (z. B. cm, in, km). Hybride Einheiten kombinieren metrische oder imperiale Einheiten.",
"enable-unit-conversion": "Einheitenumrechnung aktivieren",
"enable-unit-conversion-hint": "Aktivieren Sie diese Option, um die Umrechnung zu aktivieren. Wenn deaktiviert, wird der Quellwert unverändert übernommen. Deaktiviert, wenn es in der entsprechenden Messeinheitsgruppe nur eine Einheit gibt (z. B. Lichtstrom, AQI)."
},
"unit-system": "Einheitensystem",
"unit-system-type": {
"AUTO": "Automatisch",
"METRIC": "Metrisch",
"IMPERIAL": "Imperial",
"HYBRID": "Hybrid"
},
"measures": {
"absorbed-dose-rate": "Absorptionsdosisrate",
"acceleration": "Beschleunigung",
"acidity": "Säuregrad",
"air-quality-index": "Luftqualitätsindex",
"amount-of-substance": "Stoffmenge",
"angle": "Winkel",
"angular-acceleration": "Winkelbeschleunigung",
"area": "Fläche",
"area-density": "Flächendichte",
"capacitance": "Kapazität",
"catalytic-activity": "Katalytische Aktivität",
"catalytic-concentration": "Katalytische Konzentration",
"charge": "Ladung",
"current-density": "Stromdichte",
"data-transfer-rate": "Datenübertragungsrate",
"density": "Dichte",
"digital": "Digital",
"dimension-ratio": "Maßverhältnis",
"dynamic-viscosity": "Dynamische Viskosität",
"earthquake-magnitude": "Erdbebenstärke",
"electric-charge-density": "Elektrische Ladungsdichte",
"electric-current": "Elektrischer Strom",
"electric-dipole-moment": "Elektrisches Dipolmoment",
"electric-field-strength": "Elektrische Feldstärke",
"electric-flux": "Elektrischer Fluss",
"electric-permittivity": "Elektrische Permittivität",
"electric-polarizability": "Elektrische Polarisierbarkeit",
"electrical-conductance": "Elektrische Leitfähigkeit",
"electrical-conductivity": "Elektrische Leitfähigkeit",
"energy": "Energie",
"energy-density": "Energiedichte",
"force": "Kraft",
"frequency": "Frequenz",
"fuel-efficiency": "Kraftstoffeffizienz",
"heat-capacity": "Wärmekapazität",
"illuminance": "Beleuchtungsstärke",
"inductance": "Induktivität",
"kinematic-viscosity": "Kinematische Viskosität",
"length": "Länge",
"light-exposure": "Lichtexposition",
"linear-charge-density": "Lineare Ladungsdichte",
"logarithmic-ratio": "Logarithmisches Verhältnis",
"luminous-efficacy": "Lichtausbeute",
"luminous-flux": "Lichtstrom",
"luminous-intensity": "Lichtstärke",
"magnetic-field-gradient": "Magnetfeldgradient",
"magnetic-flux": "Magnetischer Fluss",
"magnetic-flux-density": "Magnetische Flussdichte",
"magnetic-moment": "Magnetisches Moment",
"magnetic-permeability": "Magnetische Permeabilität",
"mass": "Masse",
"mass-fraction": "Massenanteil",
"molar-concentration": "Molare Konzentration",
"molar-energy": "Molare Energie",
"molar-heat-capacity": "Molare Wärmekapazität",
"molar-mass": "Molmasse",
"number-concentration": "Teilchenkonzentration",
"parts-per-million": "Teile pro Million",
"power": "Leistung",
"power-density": "Leistungsdichte",
"pressure": "Druck",
"radiance": "Strahldichte",
"radiant-intensity": "Strahlungsintensität",
"radiation-dose": "Strahlendosis",
"radioactive-decay": "Radioaktiver Zerfall",
"radioactivity": "Radioaktivität",
"radioactivity-concentration": "Radioaktivitätskonzentration",
"reciprocal-length": "Reziproke Länge",
"resistance": "Widerstand",
"reynolds-number": "Reynolds-Zahl",
"signal-level": "Signalpegel",
"solid-angle": "Raumwinkel",
"specific-energy": "Spezifische Energie",
"specific-heat-capacity": "Spezifische Wärmekapazität",
"specific-humidity": "Spezifische Luftfeuchtigkeit",
"specific-volume": "Spezifisches Volumen",
"speed": "Geschwindigkeit",
"surface-charge-density": "Oberflächenladungsdichte",
"surface-tension": "Oberflächenspannung",
"temperature": "Temperatur",
"thermal-conductivity": "Wärmeleitfähigkeit",
"time": "Zeit",
"torque": "Drehmoment",
"turbidity": "Trübung",
"voltage": "Spannung",
"volume": "Volumen",
"volume-flow": "Volumenstrom"
},
"millimeter": "Millimeter",
"centimeter": "Zentimeter",
"decimeter": "Dezimeter",
"angstrom": "Angström",
"nanometer": "Nanometer",
"micrometer": "Mikrometer",
@ -5840,6 +6114,7 @@
"kilometer": "Kilometer",
"inch": "Zoll",
"foot": "Fuß",
"foot-us": "Fuß (US-Vermessung)",
"yard": "Yard",
"mile": "Meile",
"nautical-mile": "Seemeile",
@ -5849,14 +6124,14 @@
"steradian": "Steradiant",
"thou": "Thou",
"barleycorn": "Gerstenkorn",
"hand": "Handbreit",
"hand": "Handbreite",
"chain": "Kette",
"furlong": "Furlong",
"league": "Leuge",
"league": "Legua",
"fathom": "Faden",
"cable": "Kabellänge",
"link": "Glied",
"rod": "Rute",
"rod": "Stange",
"nanogram": "Nanogramm",
"microgram": "Mikrogramm",
"milligram": "Milligramm",
@ -5866,12 +6141,12 @@
"ounce": "Unze",
"pound": "Pfund",
"stone": "Stone",
"hundredweight-count": "Zentner",
"short-tons": "US-Tonnen",
"hundredweight-count": "Zentner (US)",
"short-tons": "Kurztonnen",
"dalton": "Dalton",
"grain": "Grain",
"grain": "Korn",
"drachm": "Drachme",
"quarter": "Quarter",
"quarter": "Viertelzentner",
"slug": "Slug",
"carat": "Karat",
"cubic-millimeter": "Kubikmillimeter",
@ -5886,6 +6161,7 @@
"cubic-foot": "Kubikfuß",
"cubic-yard": "Kubikyard",
"fluid-ounce": "Flüssigunze",
"fluid-ounce-per-second": "Flüssigunze pro Sekunde",
"pint": "Pint",
"quart": "Quart",
"gallon": "Gallone",
@ -5904,9 +6180,13 @@
"meter-per-second": "Meter pro Sekunde",
"kilometer-per-hour": "Kilometer pro Stunde",
"foot-per-second": "Fuß pro Sekunde",
"foot-per-minute": "Fuß pro Minute",
"mile-per-hour": "Meile pro Stunde",
"knot": "Knoten",
"inch-per-second": "Zoll pro Sekunde",
"inch-per-hour": "Zoll pro Stunde",
"millimeters-per-minute": "Millimeter pro Minute",
"meter-per-minute": "Meter pro Minute",
"kilometer-per-hour-squared": "Kilometer pro Stunde zum Quadrat",
"foot-per-second-squared": "Fuß pro Sekunde zum Quadrat",
"pascal": "Pascal",
@ -5918,11 +6198,12 @@
"kilobar": "Kilobar",
"newton": "Newton",
"newton-meter": "Newtonmeter",
"foot-pounds": "Fuß-Pfund",
"inch-pounds": "Zoll-Pfund",
"foot-pounds": "Fußpfund",
"inch-pounds": "Zollpfund",
"newton-per-meter": "Newton pro Meter",
"atmospheres": "Atmosphären",
"pounds-per-square-inch": "Pfund pro Quadratzoll",
"kilopound-per-square-inch": "Kilopfund pro Quadratzoll",
"torr": "Torr",
"inches-of-mercury": "Zoll Quecksilbersäule",
"pascal-per-square-meter": "Pascal pro Quadratmeter",
@ -5940,11 +6221,17 @@
"megajoule": "Megajoule",
"gigajoule": "Gigajoule",
"watt-hour": "Wattstunde",
"watt-minute": "Wattminute",
"kilowatt-hour": "Kilowattstunde",
"milliwatt-hour": "Milliwattstunde",
"megawatt-hour": "Megawattstunde",
"gigawatt-hour": "Gigawattstunde",
"electron-volts": "Elektronenvolt",
"joules-per-coulomb": "Joule pro Coulomb",
"british-thermal-unit": "Britische Wärmeeinheit (BTU)",
"foot-pound": "Fuß-Pfund",
"thousand-british-thermal-unit": "Tausend BTU",
"million-british-thermal-unit": "Million BTU",
"foot-pound": "Fußpfund",
"calorie": "Kalorie",
"small-calorie": "Kleine Kalorie",
"kilocalorie": "Kilokalorie",
@ -5953,7 +6240,7 @@
"joule-per-kilogram": "Joule pro Kilogramm",
"watt-per-meter-kelvin": "Watt pro Meter-Kelvin",
"joule-per-cubic-meter": "Joule pro Kubikmeter",
"therm": "Therm",
"therm": "Therme",
"electric-dipole-moment": "Elektrisches Dipolmoment",
"magnetic-dipole-moment": "Magnetisches Dipolmoment",
"debye": "Debye",
@ -5975,9 +6262,19 @@
"kilowatt-per-square-inch": "Kilowatt pro Quadratzoll",
"horsepower": "Pferdestärke",
"btu-per-hour": "BTU pro Stunde",
"btu-per-second": "BTU pro Sekunde",
"btu-per-day": "BTU pro Tag",
"mbtu-per-hour": "Tausend BTU pro Stunde",
"mbtu-per-second": "Tausend BTU pro Sekunde",
"mbtu-per-day": "Tausend BTU pro Tag",
"mmbtu-per-hour": "Million BTU pro Stunde",
"mmbtu-per-second": "Million BTU pro Sekunde",
"mmbtu-per-day": "Million BTU pro Tag",
"foot-pound-per-second": "Fußpfund pro Sekunde",
"coulomb": "Coulomb",
"millicoulomb": "Millicoulomb",
"microcoulomb": "Mikrocoulomb",
"nanocoulomb": "Nanocoulomb",
"picocoulomb": "Picocoulomb",
"coulomb-per-meter": "Coulomb pro Meter",
"coulomb-per-cubic-meter": "Coulomb pro Kubikmeter",
@ -5995,25 +6292,32 @@
"are": "Ar",
"barn": "Barn",
"circular-inch": "Kreiszoll",
"milliampere-hour": "Milliampere-Stunde",
"milliampere-hour": "Milliamperestunde",
"ampere-hours": "Amperestunden",
"kiloampere-hours": "Kiloamperestunden",
"nanoampere": "Nanoampere",
"picoampere": "Picoampere",
"picoampere": "Pikoampere",
"microampere": "Mikroampere",
"milliampere": "Milliampere",
"ampere": "Ampere",
"kiloampere": "Kiloampere",
"megaampere": "Megaampere",
"gigaampere": "Gigaampere",
"microampere-per-square-centimeter": "Mikroampere pro Quadratzentimeter",
"ampere-per-square-meter": "Ampere pro Quadratmeter",
"ampere-per-meter": "Ampere pro Meter",
"oersted": "Oersted",
"bohr-magneton": "Bohrsche Magneton",
"bohr-magneton": "Bohrsches Magneton",
"ampere-meter-squared": "Ampere-Quadratmeter",
"nanovolt": "Nanovolt",
"picovolt": "Picovolt",
"picovolt": "Pikovolt",
"millivolt": "Millivolt",
"microvolt": "Mikrovolt",
"volt": "Volt",
"dbmV": "dBmV",
"dbm": "dBm",
"kilovolt": "Kilovolt",
"megavolt": "Megavolt",
"dbmV": "Dezibel-Volt",
"dbm": "Dezibel-Milliwatt",
"volt-meter": "Volt-Meter",
"kilovolt-meter": "Kilovolt-Meter",
"megavolt-meter": "Megavolt-Meter",
@ -6026,10 +6330,12 @@
"kilohm": "Kiloohm",
"megohm": "Megaohm",
"gigohm": "Gigaohm",
"millihertz": "Millihertz",
"hertz": "Hertz",
"kilohertz": "Kilohertz",
"megahertz": "Megahertz",
"gigahertz": "Gigahertz",
"terahertz": "Terahertz",
"rpm": "Umdrehungen pro Minute",
"candela-per-square-meter": "Candela pro Quadratmeter",
"candela": "Candela",
@ -6046,13 +6352,13 @@
"millimole": "Millimol",
"kilomole": "Kilomol",
"mole-per-cubic-meter": "Mol pro Kubikmeter",
"rssi": "RSSI",
"ppm": "Teile pro Million",
"ppb": "Teile pro Milliarde",
"rssi": "Signalstärkeindikator (RSSI)",
"ppm": "Teile pro Million (ppm)",
"ppb": "Teile pro Milliarde (ppb)",
"micrograms-per-cubic-meter": "Mikrogramm pro Kubikmeter",
"aqi": "Luftqualitätsindex (AQI)",
"gram-per-cubic-meter": "Gramm pro Kubikmeter",
"gram-per-kilogram": "Spezifische Feuchtigkeit",
"gram-per-kilogram": "Spezifische Luftfeuchtigkeit",
"millimeters-per-second": "Millimeter pro Sekunde",
"neper": "Neper",
"bel": "Bel",
@ -6103,18 +6409,21 @@
"g-force": "g-Kraft",
"kilonewton": "Kilonewton",
"kilogram-force": "Kilopond",
"pound-force": "Pfundkraft",
"kilopound-force": "Kilopfundkraft",
"pound-force": "Pfund-Kraft",
"kilopound-force": "Kilopfund-Kraft",
"dyne": "Dyne",
"poundal": "Poundal",
"kip": "Kip",
"gal": "Gal",
"gravity": "Schwerkraft",
"gravity": "Gravitation",
"hectopascal": "Hektopascal",
"atmosphere": "Atmosphäre",
"millibars": "Millibar",
"inch-of-mercury": "Zoll Quecksilbersäule",
"inch-of-mercury": "Zoll Quecksilber",
"richter-scale": "Richterskala",
"nanosecond": "Nanosekunde",
"microsecond": "Mikrosekunde",
"millisecond": "Millisekunde",
"second": "Sekunde",
"minute": "Minute",
"hour": "Stunde",
@ -6130,6 +6439,7 @@
"gallons-per-minute": "Gallonen pro Minute",
"cubic-foot-per-second": "Kubikfuß pro Sekunde",
"milliliters-per-minute": "Milliliter pro Minute",
"cubic-decimeter-per-second": "Kubikdezimeter pro Sekunde",
"bit": "Bit",
"byte": "Byte",
"kilobyte": "Kilobyte",
@ -6152,13 +6462,16 @@
"degree": "Grad",
"radian": "Radiant",
"gradian": "Gon",
"arcminute": "Bogenminute",
"arcsecond": "Bogensekunde",
"milliradian": "Milliradiant",
"revolution": "Umdrehung",
"siemens": "Siemens",
"millisiemens": "Millisimens",
"microsiemens": "Mikrosiemens",
"kilosiemens": "Kilosiemens",
"megasiemens": "Megasiemens",
"gigasiemens": "Gigasiemens",
"microsiemens": "Mikrosimens",
"kilosiemens": "Kilosimens",
"megasiemens": "Megasimens",
"gigasiemens": "Gigasimens",
"farad": "Farad",
"millifarad": "Millifarad",
"microfarad": "Mikrofarad",
@ -6182,17 +6495,17 @@
"lambda": "Lambda",
"square-meter-per-second": "Quadratmeter pro Sekunde",
"square-centimeter-per-second": "Quadratzentimeter pro Sekunde",
"stoke": "Stoke",
"stoke": "Stokes",
"centistokes": "Zentistokes",
"square-foot-per-second": "Quadratfuß pro Sekunde",
"square-inch-per-second": "Quadratzoll pro Sekunde",
"pascal-second": "Pascal-Sekunde",
"centipoise": "Zentipoise",
"poise": "Poise",
"reynolds": "Reynolds",
"reynolds": "Reynolds-Zahl",
"pound-per-foot-hour": "Pfund pro Fuß-Stunde",
"newton-second-per-square-meter": "Newtonsekunde pro Quadratmeter",
"dyne-second-per-square-centimeter": "Dynesekunde pro Quadratzentimeter",
"newton-second-per-square-meter": "Newton-Sekunde pro Quadratmeter",
"dyne-second-per-square-centimeter": "Dyne-Sekunde pro Quadratzentimeter",
"kilogram-per-meter-second": "Kilogramm pro Meter-Sekunde",
"tesla-square-meters": "Tesla-Quadratmeter",
"maxwell": "Maxwell",
@ -6220,11 +6533,13 @@
"kilovolts-per-meter": "Kilovolt pro Meter",
"radian-per-second": "Radiant pro Sekunde",
"radian-per-second-squared": "Radiant pro Sekunde zum Quadrat",
"revolutions-per-minute-per-second": "Drehbeschleunigung",
"revolutions-per-minute-per-second": "Winkelbeschleunigung",
"deg-per-second": "Grad pro Sekunde",
"rotation-per-minute": "Umdrehungen pro Minute",
"degrees-brix": "Grad Brix",
"katal": "Katal",
"katal-per-cubic-metre": "Katal pro Kubikmeter"
"katal-per-cubic-metre": "Katal pro Kubikmeter",
"paris-inch": "Pariser Zoll"
},
"user": {
"user": "Benutzer",
@ -6707,9 +7022,9 @@
"advanced-settings": "Erweiterte Einstellungen",
"data-settings": "Daten-Einstellungen",
"limits": "Grenzwerte",
"no-data-display-message": "Alternative Nachricht bei fehlenden Daten",
"data-page-size": "Maximale Anzahl von Entitäten pro Datenquelle",
"settings-component-not-found": "Einstellungsformular-Komponente für Selector '{{selector}}' nicht gefunden",
"no-data-display-message": "Alternative Meldung für \"Keine Daten zur Anzeige\"",
"data-page-size": "Maximale Entitäten pro Datenquelle",
"settings-component-not-found": "Einstellungsformular-Komponente für Selektor '{{selector}}' nicht gefunden",
"preview": "Vorschau",
"set": "Festlegen",
"set-message": "Nachricht festlegen",
@ -7774,6 +8089,18 @@
"fill-area-opacity": "Füllbereichsdeckkraft",
"range-chart-style": "Stil des Bereichsdiagramms"
},
"knob": {
"behavior": "Verhalten",
"initial-value": "Anfangswert",
"initial-value-hint": "Aktion zum Abrufen des Anfangswerts des Reglers.",
"on-value-change": "Beim Wertwechsel",
"on-value-change-hint": "Aktion, die ausgelöst wird, wenn der Reglerwert geändert wird.",
"range": "Bereich",
"min": "min",
"max": "max",
"value": "Wert",
"fallback-initial-value": "Ausweich-Anfangswert"
},
"rpc": {
"value-settings": "Werteinstellungen",
"initial-value": "Anfangswert",
@ -7830,9 +8157,7 @@
"led-status-value-timeseries": "Zeitreihe des Geräts mit LED-Statuswert",
"check-status-method": "RPC-Methode zur Geräteprüfung",
"parse-led-status-value-function": "Funktion zum Parsen des LED-Statuswerts",
"knob-title": "Drehregler-Titel",
"min-value": "Minimalwert",
"max-value": "Maximalwert"
"knob-title": "Drehregler-Titel"
},
"maps": {
"map-type": {
@ -8676,18 +9001,22 @@
"pie-chart-card-style": "Kreisdiagramm-Kartenstil"
},
"radar-chart": {
"radar-appearance": "Radar-Diagramm",
"radar-appearance": "Radar-Darstellung",
"shape": "Form",
"shape-polygon": "Polygon",
"shape-circle": "Kreis",
"color": "Farbe",
"line": "Linie",
"points": "Punkte",
"points-label": "Punktebezeichnung",
"points-label": "Punktebeschriftung",
"radar-axis": "Radar-Achse",
"axis-label": "Achsenbeschriftung",
"ticks-label": "Skalenbeschriftung",
"radar-chart-style": "Radar-Diagrammstil"
"ticks-label": "Teilstrichbeschriftung",
"radar-chart-style": "Radar-Diagramm-Stil",
"max-axes-scaling": "Maximale Achsenskalierung",
"max-axes-scaling-hint": "Wählen Sie, ob jede Radarachse ihren eigenen Maximalwert hat (Separat) oder ob alle Achsen den höchsten Wert aus dem Widget-Datensatz gemeinsam nutzen (Gemeinsam).",
"separate": "Separat",
"common": "Gemeinsam"
},
"time-series-chart": {
"chart": "Diagramm",

858
ui-ngx/src/assets/locale/locale.constant-el_GR.json

File diff suppressed because it is too large

4
ui-ngx/src/assets/locale/locale.constant-en_US.json

@ -5446,11 +5446,11 @@
"prompt-settings": "Prompt settings",
"prompt-settings-hint": "The optional system prompt sets the AI's general role and constraints, while the user prompt defines the specific task to perform. Both fields also support templatization.",
"system-prompt": "System prompt",
"system-prompt-max-length": "System prompt must be 10000 characters or less.",
"system-prompt-max-length": "System prompt must be 500000 characters or less.",
"system-prompt-blank": "System prompt must not be blank.",
"user-prompt": "User prompt",
"user-prompt-required": "User prompt is required.",
"user-prompt-max-length": "User prompt must be 10000 characters or less.",
"user-prompt-max-length": "User prompt must be 500000 characters or less.",
"user-prompt-blank": "User prompt must not be blank.",
"response-format": "Response format",
"response-text": "Text",

1039
ui-ngx/src/assets/locale/locale.constant-es_ES.json

File diff suppressed because it is too large

555
ui-ngx/src/assets/locale/locale.constant-fr_FR.json

@ -545,7 +545,13 @@
"slack-settings": "Paramètres Slack",
"mobile-settings": "Paramètres mobiles",
"firebase-service-account-file": "Fichier JSON des identifiants du compte de service Firebase",
"select-firebase-service-account-file": "Glissez-déposez votre fichier d'identifiants de compte de service Firebase ou "
"select-firebase-service-account-file": "Glissez-déposez votre fichier d'identifiants de compte de service Firebase ou ",
"trendz": "Trendz",
"trendz-settings": "Paramètres Trendz",
"trendz-url": "URL Trendz",
"trendz-url-required": "L'URL Trendz est requise",
"trendz-api-key": "Clé API Trendz",
"trendz-enable": "Activer Trendz"
},
"alarm": {
"alarm": "Alarme",
@ -677,8 +683,8 @@
"filter-type-entity-list": "Liste d'entités",
"filter-type-entity-name": "Nom de l'entité",
"filter-type-entity-type": "Type d'entité",
"filter-type-state-entity": "Entité à partir de l'état du tableau de bord",
"filter-type-state-entity-description": "Entité extraite des paramètres d'état du tableau de bord",
"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-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}}'",
@ -709,17 +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é d'état du tableau de bord comme racine",
"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-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",
"max-relation-level": "Niveau maximum de relation",
"query-options": "Options de requête",
"max-relation-level": "Niveau de relation maximal",
"unlimited-level": "Niveau illimité",
"state-entity": "Entité d'état du tableau de bord",
"all-entities": "Toutes les entités",
"any-relation": "n'importe laquelle"
"any-relation": "n'importe quelle"
},
"asset": {
"asset": "Actif",
@ -917,22 +924,27 @@
"view-statistics": "Voir les statistiques"
},
"api-limit": {
"cassandra-queries": "Requêtes Cassandra",
"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é",
"notification-requests": "Requêtes de notification",
"notification-requests-per-rule": "Requêtes de notification par règle",
"rest-api-requests": "Requêtes REST API",
"rest-api-requests-per-customer": "Requêtes REST API par client",
"rest-api-requests": "Requêtes API REST",
"rest-api-requests-per-customer": "Requêtes API REST par client",
"transport-messages": "Messages de transport",
"transport-messages-per-device": "Messages de transport par appareil",
"transport-messages-per-gateway": "Messages de transport par passerelle",
"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-events-per-edge": "Événements Edge par instance Edge",
"edge-uplink-messages": "Messages montants Edge",
"edge-uplink-messages-per-edge": "Messages montants Edge par instance"
"edge-uplink-messages-per-edge": "Messages montants Edge par instance Edge"
},
"audit-log": {
"audit": "Audit",
@ -996,9 +1008,9 @@
"failures": "Échecs",
"entity": "entité",
"hint": {
"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."
"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."
}
},
"calculated-fields": {
@ -1018,13 +1030,13 @@
"add-argument": "Ajouter un argument",
"test-script-function": "Tester la fonction script",
"no-arguments": "Aucun argument configuré",
"argument-settings": "Paramètres de l'argument",
"argument-settings": "Paramètres des arguments",
"argument-current": "Entité actuelle",
"argument-current-tenant": "Tenant actuel",
"argument-current-tenant": "Locataire actuel",
"argument-device": "Appareil",
"argument-asset": "Actif",
"argument-customer": "Client",
"argument-tenant": "Tenant actuel",
"argument-tenant": "Locataire actuel",
"argument-type": "Type d'argument",
"see-debug-events": "Voir les événements de débogage",
"attribute": "Attribut",
@ -1057,24 +1069,103 @@
"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.",
"test-with-this-message": "Tester avec ce message",
"use-latest-timestamp": "Utiliser l'horodatage le plus récent",
"hint": {
"arguments-simple-with-rolling": "Le type simple de champ calculé ne doit pas contenir de clés avec un rolling de séries temporelles.",
"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-empty": "Les arguments ne doivent pas être vides.",
"expression-required": "L'expression est requise.",
"expression-required": "Une 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 contenir moins de 256 caractères.",
"argument-name-forbidden": "Le nom de l'argument est réservé et ne peut pas être utilisé.",
"argument-name-max-length": "Le nom de l'argument doit comporter 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 maximum d'arguments atteint.",
"max-args": "Nombre maximal d'arguments atteint.",
"decimals-range": "Les décimales par défaut doivent être un nombre entre 0 et 15.",
"expression": "L'expression par défaut montre comment transformer une température de Fahrenheit en Celsius.",
"arguments-entity-not-found": "L'entité cible de l'argument est introuvable."
"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."
}
},
"ai-models": {
"ai-models": "Modèles IA",
"ai-model": "Modèle IA",
"model": "Modèle",
"name": "Nom",
"ai-provider": "Fournisseur IA",
"no-found": "Aucun modèle 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-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.",
"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": "Modèles GitHub"
},
"name-required": "Le nom est requis.",
"name-max-length": "Le nom doit comporter 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.",
"location": "Emplacement",
"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.",
"configuration": "Configuration",
"model-id": "ID du modèle",
"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.",
"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.",
"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-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-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-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.",
"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.",
"endpoint": "Point de terminaison",
"endpoint-required": "Le point de terminaison est requis.",
"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é.",
"model-required": "Le modèle est requis.",
"no-model-text": "Aucun modèle trouvé."
},
"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.<br/>Êtes-vous sûr de vouloir quitter cette page ?",
@ -1753,7 +1844,8 @@
"step": "Pas",
"selected-options-limit": "Limite d'options sélectionnées",
"advanced-ui-settings": "Paramètres UI avancés",
"disable-on-property": "Désactiver en fonction de la propriété",
"disable-on-property": "Désactiver selon la propriété",
"disable-on-property-none": "Aucune (champ toujours activé)",
"display-condition-function": "Fonction de condition d'affichage",
"sub-label": "Sous-étiquette",
"vertical-divider-after": "Séparateur vertical après",
@ -1787,7 +1879,8 @@
"array-item": "Élément du tableau",
"item-type": "Type d'élément",
"item-name": "Nom de l'élément",
"no-items": "Aucun élément"
"no-items": "Aucun élément",
"support-unit-conversion": "Prise en charge de 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 ?",
@ -1911,6 +2004,7 @@
"mqtt-use-json-format-for-default-downlink-topics-hint": "Utilise JSON pour les sujets : <b>v1/devices/me/attributes/response/$request_id</b>, 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-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é",
"snmp-timseries-or-attribute-name": "Nom de série temporelle/attribut pour le mappage",
@ -2171,6 +2265,9 @@
"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",
"client-strategy-label": "Stratégie",
"client-strategy-only-observe": "Envoyer uniquement la requête d’observation après connexion initiale",
@ -2201,7 +2298,17 @@
"default-object-id": "Version par défaut de l'objet (Attribut)",
"default-object-id-ver": {
"v1-0": "1.0",
"v1-1": "1.1"
"v1-1": "1.1",
"v1-2": "1.2"
},
"observe-strategy": {
"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)"
}
},
"snmp": {
@ -2524,6 +2631,8 @@
"type-current-user-owner": "Propriétaire 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",
"list-of-widgets-bundles": "{ count, plural, =1 {Un pack de widgets} other {Liste de # packs de widgets} }",
@ -2553,6 +2662,8 @@
"type-tb-resources": "Ressources",
"list-of-tb-resources": "{ count, plural, =1 {Une ressource} other {Liste de # ressources} }",
"type-ota-package": "Paquet 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",
@ -2938,6 +3049,7 @@
"missing-key-filters-error": "Les filtres clés sont manquants pour le filtre '{{filter}}'.",
"filter": "Filtre",
"editable": "Éditable",
"editable-hint": "Autoriser l'utilisateur à 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",
@ -2977,6 +3089,8 @@
"filter-user-params": "Paramètres utilisateur du prédicat du filtre",
"user-parameters": "Paramètres utilisateur",
"display-label": "Libellé à afficher",
"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é",
@ -3021,7 +3135,8 @@
"switch-to-dynamic-value": "Basculer vers la valeur dynamique",
"switch-to-default-value": "Basculer vers 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": {
"expand": "Agrandir en plein écran",
@ -3406,6 +3521,7 @@
"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",
"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",
@ -3718,10 +3834,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": "Paquet de l'application",
"mobile-package-max-length": "Le paquet de l'application doit contenir moins de 256 caractères",
"mobile-package-required": "Le paquet de l'application est requis.",
"mobile-package-pattern": "Format du paquet de l'application invalide",
"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",
@ -3805,17 +3923,13 @@
"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-api-title": "Configurer le point de terminaison de l'API ThingsBoard",
"configure-api-text": "Ouvrez le projet flutter_thingsboard_pe_app dans votre éditeur/IDE. Modifiez :",
"configure-api-hint": "Définissez la valeur de la constante thingsBoardApiEndpoint pour correspondre au point de terminaison API de votre instance ThingsBoard. N'utilisez pas les noms d'hôte “localhost” ou “127.0.0.1”.",
"run-app-title": "Lancer l'application",
"run-app-text": "Lancez l'application comme décrit dans votre IDE.\nSi vous utilisez le terminal, exécutez l'application avec la commande suivante :",
"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 :",
"more-information": "Des informations détaillées sont disponibles dans notre documentation de démarrage.",
"getting-started": "Commencer",
"configure-package-title": "Configurer le paquet de l'application",
"configure-package-text": "Vous pouvez modifier manuellement le paquet de l'application ou utiliser un outil CLI tiers.",
"configure-package-text-install": "Pour installer l'outil Rename CLI, exécutez la commande suivante :",
"configure-package-run-commands": "Exécutez ces commandes dans le répertoire racine de votre projet :"
"getting-started": "Démarrage"
}
},
"notification": {
@ -3839,6 +3953,7 @@
"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é",
"basic-settings": "Paramètres de base",
"button-text": "Texte du bouton",
@ -3853,6 +3968,7 @@
"create-new": "Créer nouveau",
"created": "Créé",
"customize-messages": "Personnaliser les messages",
"cpu-threshold": "Seuil CPU",
"delete-notification-text": "Attention, après confirmation, la notification sera irrécupérable.",
"delete-notification-title": "Êtes-vous sûr de vouloir supprimer la notification ?",
"delete-notifications-text": "Attention, après confirmation, les notifications seront irrécupérables.",
@ -3919,6 +4035,7 @@
"input-fields-support-templatization": "Les champs de saisie prennent en charge la templatisation.",
"link": "Lien",
"link-required": "Le lien est requis",
"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"
@ -3945,6 +4062,7 @@
"no-severity-found": "Aucune sévérité trouvée",
"no-severity-matching": "'{{severity}}' introuvable.",
"no-template-matching": "Aucune ressource correspondant à '{{template}}' trouvée.",
"create-new-template": "Créer un nouveau modèle !",
"not-found-slack-recipient": "Destinataire Slack introuvable",
"notification": "Notification",
"notification-center": "Centre de notifications",
@ -3968,6 +4086,7 @@
"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",
"recipient": "Destinataire",
@ -4033,6 +4152,7 @@
"start-from-scratch": "Commencer 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",
@ -4051,10 +4171,11 @@
"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 taux dépassées",
"edge-communication-failure": "Échec de communication avec l'Edge",
"rate-limits": "Limites de débit dépassées",
"edge-communication-failure": "Échec de communication Edge",
"edge-connection": "Connexion Edge",
"task-processing-failure": "Échec de traitement de tâche"
"task-processing-failure": "Échec du traitement de la tâche",
"resources-shortage": "Pénurie de ressources"
},
"templates": "Modèles",
"notification-templates": "Notifications / Modèles",
@ -4074,10 +4195,11 @@
"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 taux dépassées",
"rate-limits": "Limites de débit dépassées",
"edge-connection": "Connexion Edge",
"edge-communication-failure": "Échec de communication avec l'Edge",
"task-processing-failure": "Échec de traitement de tâche",
"edge-communication-failure": "Échec de communication Edge",
"task-processing-failure": "Échec du traitement de la tâche",
"resources-shortage": "Pénurie de ressources",
"trigger": "Déclencheur",
"trigger-required": "Le déclencheur est requis"
},
@ -4119,6 +4241,7 @@
"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} }.",
"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-software-distributed-device": "Choisissez le logiciel à distribuer aux appareils",
@ -4314,6 +4437,7 @@
"add-relation-filter": "Ajouter un filtre de relation",
"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.",
"no-relations-text": "Aucune relation trouvée",
@ -5174,12 +5298,12 @@
"skip-empty-fields-tooltip": "Les champs vides ne seront pas ajoutés au message de sortie ou aux 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}} à {{endInterval}} {{endIntervalTimeUnit}}.",
"fetch-timeseries-from-to-invalid": "Récupération des séries invalide (« Début de l'intervalle » doit être inférieur à « Fin de l'intervalle »).",
"use-metadata-dynamic-interval-tooltip": "Utilise un intervalle dynamique basé sur le message et les métadonnées si activé.",
"all-mode-hint": "En mode « Tout », récupère la télémétrie selon l'intervalle et les paramètres définis.",
"first-mode-hint": "Récupère la télémétrie la plus proche du début de l'intervalle.",
"last-mode-hint": "Récupère la télémétrie la plus proche de la fin de l'intervalle.",
"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.",
"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.",
"ascending": "Croissant",
"descending": "Décroissant",
"min": "Minimum",
@ -5304,6 +5428,36 @@
"html-text-description": "Permet d'utiliser des balises HTML pour la mise en forme, les liens et les images dans le corps du message.",
"dynamic-text-description": "Permet d'utiliser dynamiquement le texte brut ou HTML selon le modèle.",
"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",
"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.",
"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-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-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."
}
},
"timezone": {
@ -5625,7 +5779,10 @@
"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-tenant-limits-configuration": "Requête Cassandra pour le locataire",
"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)",
"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",
@ -5638,26 +5795,30 @@
"ws-limit-updates-per-session": "Mises à jour WS par session",
"rate-limits": {
"add-limit": "Ajouter une limite",
"and-also-less-than": "et aussi inférieur à",
"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 la limite des événements de débogage de champ calculé",
"edit-transport-tenant-msg-title": "Modifier les limites de messages de transport du locataire",
"edit-transport-tenant-telemetry-msg-title": "Modifier les limites des messages de télémétrie du locataire",
"edit-transport-tenant-telemetry-data-points-title": "Modifier les limites des points de données de télémétrie du locataire",
"edit-transport-device-msg-title": "Modifier les limites des messages de l’appareil",
"edit-transport-device-telemetry-msg-title": "Modifier les limites des messages de télémétrie de l’appareil",
"edit-transport-device-telemetry-data-points-title": "Modifier les limites des points de données de télémétrie de l’appareil",
"edit-transport-gateway-msg-title": "Modifier les limites des messages de la passerelle",
"edit-transport-gateway-telemetry-msg-title": "Modifier les limites des messages de télémétrie de la passerelle",
"edit-transport-gateway-telemetry-data-points-title": "Modifier les limites des points de données de télémétrie de la passerelle",
"edit-transport-gateway-device-msg-title": "Modifier les limites des messages des appareils de la passerelle",
"edit-transport-gateway-device-telemetry-msg-title": "Modifier les limites des messages de télémétrie des appareils de la passerelle",
"edit-transport-gateway-device-telemetry-data-points-title": "Modifier les limites des points de données de télémétrie des appareils de la passerelle",
"edit-tenant-rest-limits-title": "Modifier les limites des requêtes REST du locataire",
"edit-customer-rest-limits-title": "Modifier les limites des requêtes REST du client",
"edit-ws-limit-updates-per-session-title": "Modifier les limites des mises à jour WS par session",
"edit-cassandra-tenant-limits-configuration-title": "Modifier les limites des requêtes Cassandra du locataire",
"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",
@ -5679,6 +5840,7 @@
"per-seconds": "Par secondes",
"per-seconds-required": "La durée est requise.",
"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",
"remove-limit": "Supprimer la limite",
"transport-tenant-msg": "Messages de transport du locataire",
@ -5768,11 +5930,11 @@
"sec": "{{ sec }} sec",
"sec-short": "{{ sec }}s",
"short": {
"years": "{ years, plural, =1 {1 année } other {# années } }",
"years": "{ years, plural, =1 {1 an } other {# ans } }",
"days": "{ days, plural, =1 {1 jour } other {# jours } }",
"hours": "{ hours, plural, =1 {1 heure } other {# heures } }",
"minutes": "{{minutes}} min",
"seconds": "{{seconds}} sec"
"minutes": "{{minutes}} min ",
"seconds": "{{seconds}} sec "
},
"realtime": "Temps réel",
"history": "Historique",
@ -5826,13 +5988,125 @@
"value": "Valeur",
"date": "Date",
"show-date-time-interval": "Afficher l’intervalle date/heure",
"show-date-time-interval-hint": "Afficher l’intervalle date/heure selon l’agrégation des données.",
"show-date-time-interval-hint": "Afficher l’intervalle date/heure en fonction de 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"
},
"unit": {
"set-unit-conversion": "Définir la conversion d’unités",
"unit-settings": {
"unit-settings": "Paramètres d’unité",
"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).",
"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-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-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)."
},
"unit-system": "Système d’unités",
"unit-system-type": {
"AUTO": "Auto",
"METRIC": "Métrique",
"IMPERIAL": "Impérial",
"HYBRID": "Hybride"
},
"measures": {
"absorbed-dose-rate": "Débit 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",
"angle": "Angle",
"angular-acceleration": "Accélération angulaire",
"area": "Surface",
"area-density": "Densité surfacique",
"capacitance": "Capacité électrique",
"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",
"density": "Densité",
"digital": "Numérique",
"dimension-ratio": "Rapport de dimensions",
"dynamic-viscosity": "Viscosité dynamique",
"earthquake-magnitude": "Magnitude sismique",
"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",
"electrical-conductance": "Conductance électrique",
"electrical-conductivity": "Conductivité électrique",
"energy": "Énergie",
"energy-density": "Densité d’énergie",
"force": "Force",
"frequency": "Fréquence",
"fuel-efficiency": "Rendement énergétique",
"heat-capacity": "Capacité thermique",
"illuminance": "Éclairement lumineux",
"inductance": "Inductance",
"kinematic-viscosity": "Viscosité cinématique",
"length": "Longueur",
"light-exposure": "Exposition lumineuse",
"linear-charge-density": "Densité linéique de charge",
"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-flux": "Flux magnétique",
"magnetic-flux-density": "Induction magnétique",
"magnetic-moment": "Moment magnétique",
"magnetic-permeability": "Perméabilité magnétique",
"mass": "Masse",
"mass-fraction": "Fraction massique",
"molar-concentration": "Concentration molaire",
"molar-energy": "Énergie molaire",
"molar-heat-capacity": "Capacité thermique molaire",
"molar-mass": "Masse molaire",
"number-concentration": "Concentration numérique",
"parts-per-million": "Parties par million",
"power": "Puissance",
"power-density": "Densité de puissance",
"pressure": "Pression",
"radiance": "Radiance",
"radiant-intensity": "Intensité de rayonnement",
"radiation-dose": "Dose de rayonnement",
"radioactive-decay": "Désintégration radioactive",
"radioactivity": "Radioactivité",
"radioactivity-concentration": "Concentration radioactive",
"reciprocal-length": "Longueur réciproque",
"resistance": "Résistance",
"reynolds-number": "Nombre de Reynolds",
"signal-level": "Niveau du 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",
"temperature": "Température",
"thermal-conductivity": "Conductivité thermique",
"time": "Temps",
"torque": "Couple",
"turbidity": "Turbidité",
"voltage": "Tension",
"volume": "Volume",
"volume-flow": "Débit volumique"
},
"millimeter": "Millimètre",
"centimeter": "Centimètre",
"decimeter": "Décimètre",
"angstrom": "Angström",
"nanometer": "Nanomètre",
"micrometer": "Micromètre",
@ -5840,6 +6114,7 @@
"kilometer": "Kilomètre",
"inch": "Pouce",
"foot": "Pied",
"foot-us": "Pied (US survey)",
"yard": "Yard",
"mile": "Mille",
"nautical-mile": "Mille nautique",
@ -5886,6 +6161,7 @@
"cubic-foot": "Pied cube",
"cubic-yard": "Yard cube",
"fluid-ounce": "Once liquide",
"fluid-ounce-per-second": "Once liquide par seconde",
"pint": "Pinte",
"quart": "Quart",
"gallon": "Gallon",
@ -5904,9 +6180,13 @@
"meter-per-second": "Mètre par seconde",
"kilometer-per-hour": "Kilomètre par heure",
"foot-per-second": "Pied par seconde",
"foot-per-minute": "Pied par minute",
"mile-per-hour": "Mille par heure",
"knot": "Nœud",
"inch-per-second": "Pouce par seconde",
"inch-per-hour": "Pouce par heure",
"millimeters-per-minute": "Millimètres par minute",
"meter-per-minute": "Mètre par minute",
"kilometer-per-hour-squared": "Kilomètre par heure carrée",
"foot-per-second-squared": "Pied par seconde carrée",
"pascal": "Pascal",
@ -5923,6 +6203,7 @@
"newton-per-meter": "Newton par mètre",
"atmospheres": "Atmosphères",
"pounds-per-square-inch": "Livres par pouce carré",
"kilopound-per-square-inch": "Kilolivre par pouce carré",
"torr": "Torr",
"inches-of-mercury": "Pouces de mercure",
"pascal-per-square-meter": "Pascal par mètre carré",
@ -5940,10 +6221,16 @@
"megajoule": "Mégajoule",
"gigajoule": "Gigajoule",
"watt-hour": "Watt-heure",
"watt-minute": "Watt-minute",
"kilowatt-hour": "Kilowatt-heure",
"electron-volts": "Électronvolt",
"milliwatt-hour": "Milliwatt-heure",
"megawatt-hour": "Mégawatt-heure",
"gigawatt-hour": "Gigawatt-heure",
"electron-volts": "Électron-volt",
"joules-per-coulomb": "Joules par coulomb",
"british-thermal-unit": "British Thermal Unit",
"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",
"foot-pound": "Pied-livre",
"calorie": "Calorie",
"small-calorie": "Petite calorie",
@ -5974,10 +6261,20 @@
"watt-per-square-inch": "Watt par pouce carré",
"kilowatt-per-square-inch": "Kilowatt par pouce carré",
"horsepower": "Cheval-vapeur",
"btu-per-hour": "BTU/heure",
"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",
"foot-pound-per-second": "Pied-livre par seconde",
"coulomb": "Coulomb",
"millicoulomb": "Millicoulomb",
"microcoulomb": "Microcoulomb",
"nanocoulomb": "Nanocoulomb",
"picocoulomb": "Picocoulomb",
"coulomb-per-meter": "Coulomb par mètre",
"coulomb-per-cubic-meter": "Coulomb par mètre cube",
@ -5996,25 +6293,32 @@
"barn": "Barn",
"circular-inch": "Pouce circulaire",
"milliampere-hour": "Milliampère-heure",
"ampere-hours": "Ampères-heures",
"kiloampere-hours": "Kiloampères-heures",
"ampere-hours": "Ampère-heure",
"kiloampere-hours": "Kiloampère-heure",
"nanoampere": "Nanoampère",
"picoampere": "Picoampère",
"microampere": "Microampère",
"milliampere": "Milliampère",
"ampere": "Ampère",
"kiloampere": "Kiloampère",
"megaampere": "Mégaampère",
"gigaampere": "Gigaampère",
"microampere-per-square-centimeter": "Microampère par centimètre carré",
"ampere-per-square-meter": "Ampère par mètre carré",
"ampere-per-meter": "Ampère par mètre",
"oersted": "Oersted",
"bohr-magneton": "Magnéton de Bohr",
"bohr-magneton": "Magneton de Bohr",
"ampere-meter-squared": "Ampère-mètre carré",
"nanovolt": "Nanovolt",
"picovolt": "Picovolt",
"millivolt": "Millivolt",
"microvolt": "Microvolt",
"volt": "Volt",
"dbmV": "dBmV",
"dbm": "dBm",
"volt-meter": "Voltmètre",
"kilovolt": "Kilovolt",
"megavolt": "Mégavolt",
"dbmV": "Décibel-volt",
"dbm": "Décibel-milliwatt",
"volt-meter": "Volt-mètre",
"kilovolt-meter": "Kilovolt-mètre",
"megavolt-meter": "Mégavolt-mètre",
"microvolt-meter": "Microvolt-mètre",
@ -6024,12 +6328,14 @@
"microohm": "Microohm",
"milliohm": "Milliohm",
"kilohm": "Kilohm",
"megohm": "Mégohm",
"gigohm": "Gigohm",
"megohm": "Mégaohm",
"gigohm": "Gigaohm",
"millihertz": "Millihertz",
"hertz": "Hertz",
"kilohertz": "Kilohertz",
"megahertz": "Mégahertz",
"gigahertz": "Gigahertz",
"terahertz": "Térrahertz",
"rpm": "Tours par minute",
"candela-per-square-meter": "Candela par mètre carré",
"candela": "Candela",
@ -6046,12 +6352,12 @@
"millimole": "Millimole",
"kilomole": "Kilomole",
"mole-per-cubic-meter": "Mole par mètre cube",
"rssi": "RSSI",
"rssi": "Indicateur de puissance du signal reçu (RSSI)",
"ppm": "Parties par million",
"ppb": "Parties par milliard",
"micrograms-per-cubic-meter": "Microgrammes par mètre cube",
"aqi": "Indice de qualité de lair (AQI)",
"gram-per-cubic-meter": "Grammes par mètre cube",
"aqi": "Indice de qualité de l'air (AQI)",
"gram-per-cubic-meter": "Gramme par mètre cube",
"gram-per-kilogram": "Humidité spécifique",
"millimeters-per-second": "Millimètres par seconde",
"neper": "Néper",
@ -6090,11 +6396,11 @@
"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é des particules",
"particle-density": "Densité de 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 mile",
"gallons-per-mile": "Gallons par mille",
"liters-per-hour": "Litres par heure",
"gallons-per-hour": "Gallons par heure",
"beats-per-minute": "Battements par minute",
@ -6115,6 +6421,9 @@
"millibars": "Millibars",
"inch-of-mercury": "Pouce de mercure",
"richter-scale": "Échelle de Richter",
"nanosecond": "Nanoseconde",
"microsecond": "Microseconde",
"millisecond": "Milliseconde",
"second": "Seconde",
"minute": "Minute",
"hour": "Heure",
@ -6130,6 +6439,7 @@
"gallons-per-minute": "Gallons par minute",
"cubic-foot-per-second": "Pied cube par seconde",
"milliliters-per-minute": "Millilitres par minute",
"cubic-decimeter-per-second": "Décimètre cube par seconde",
"bit": "Bit",
"byte": "Octet",
"kilobyte": "Kilooctet",
@ -6146,12 +6456,15 @@
"gigabit-per-second": "Gigabit par seconde",
"terabit-per-second": "Térabit par seconde",
"byte-per-second": "Octet par seconde",
"kilobyte-per-second": "Kilooctets par seconde",
"megabyte-per-second": "Mégaoctets par seconde",
"gigabyte-per-second": "Gigaoctets par seconde",
"kilobyte-per-second": "Kilooctet par seconde",
"megabyte-per-second": "Mégaoctet par seconde",
"gigabyte-per-second": "Gigaoctet par seconde",
"degree": "Degré",
"radian": "Radian",
"gradian": "Gradian",
"gradian": "Grade",
"arcminute": "Minute d’arc",
"arcsecond": "Seconde d’arc",
"milliradian": "Milliradian",
"revolution": "Révolution",
"siemens": "Siemens",
"millisiemens": "Millisiemens",
@ -6209,7 +6522,7 @@
"nanohenry": "Nanohenry",
"henry-per-meter": "Henry par mètre",
"tesla-meter-per-ampere": "Tesla mètre par ampère",
"gauss-per-oersted": "Gauss par Oersted",
"gauss-per-oersted": "Gauss par oersted",
"kilogram-per-mole": "Kilogramme par mole",
"gram-per-mole": "Gramme par mole",
"milligram-per-mole": "Milligramme par mole",
@ -6221,10 +6534,12 @@
"radian-per-second": "Radian par seconde",
"radian-per-second-squared": "Radian par seconde carrée",
"revolutions-per-minute-per-second": "Accélération angulaire",
"deg-per-second": "Degrés/seconde",
"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"
"katal-per-cubic-metre": "Katal par mètre cube",
"paris-inch": "Pouce de Paris"
},
"user": {
"user": "Utilisateur",
@ -6387,14 +6702,14 @@
"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.<br>Êtes-vous sûr de vouloir quitter cette page ?",
"widget-type-not-found": "Problème de chargement de la configuration du widget.<br>Le type de widget associé a probablement été supprimé.",
"widget-type-load-error": "Le widget n’a pas été chargé en raison des erreurs suivantes :",
"confirm-to-exit-editor-html": "Vous avez des paramètres de widget non enregistrés.<br>Êtes-vous sûr de vouloir quitter cette page ?",
"widget-type-not-found": "Problème lors du chargement de la configuration du widget.<br>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 :",
"remove": "Supprimer le widget",
"delete": "Supprimer le widget",
"edit": "Modifier 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 irrécupérables.",
"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.",
"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",
@ -6508,7 +6823,7 @@
"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 %.",
"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",
"popover-placement-top": "Haut",
"popover-placement-topLeft": "Haut gauche",
@ -7774,6 +8089,18 @@
"fill-area-opacity": "Opacité de la zone remplie",
"range-chart-style": "Style du graphique à plages"
},
"knob": {
"behavior": "Comportement",
"initial-value": "Valeur initiale",
"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",
"min": "min",
"max": "max",
"value": "Valeur",
"fallback-initial-value": "Valeur initiale de secours"
},
"rpc": {
"value-settings": "Paramètres de la valeur",
"initial-value": "Valeur initiale",
@ -7830,9 +8157,7 @@
"led-status-value-timeseries": "Série temporelle contenant l’état LED",
"check-status-method": "Méthode RPC de vérification de l’état de l’appareil",
"parse-led-status-value-function": "Fonction d’analyse de l’état LED",
"knob-title": "Titre du bouton rotatif",
"min-value": "Valeur minimale",
"max-value": "Valeur maximale"
"knob-title": "Titre du bouton rotatif"
},
"maps": {
"map-type": {
@ -8683,11 +9008,15 @@
"color": "Couleur",
"line": "Ligne",
"points": "Points",
"points-label": "Libellé des points",
"points-label": "Étiquette des points",
"radar-axis": "Axe radar",
"axis-label": "Libellé de l'axe",
"ticks-label": "Libellé des graduations",
"radar-chart-style": "Style du graphique radar"
"axis-label": "Étiquette des axes",
"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"
},
"time-series-chart": {
"chart": "Graphique",

10365
ui-ngx/src/assets/locale/locale.constant-tr_TR.json

File diff suppressed because it is too large
Loading…
Cancel
Save