Commit e761f53dd09bb29c48c7d2aaea9db96a73fbf98b

Authored by Volodymyr Babak
1 parent f17acd5a

Hide entity type edge if disabled. Renaming edge rule chain to rule chain templa…

…tes. Minor fixes after demo
@@ -28,8 +28,8 @@ import { RuleChainType } from "@shared/models/rule-chain.models"; @@ -28,8 +28,8 @@ import { RuleChainType } from "@shared/models/rule-chain.models";
28 }) 28 })
29 export class ComponentDescriptorService { 29 export class ComponentDescriptorService {
30 30
31 - private componentsByType: Map<ComponentType | RuleNodeType, Array<ComponentDescriptor>> =  
32 - new Map<ComponentType, Array<ComponentDescriptor>>(); 31 + private componentsByTypeByRuleChainType: Map<RuleChainType, Map<ComponentType | RuleNodeType, Array<ComponentDescriptor>>> =
  32 + new Map<RuleChainType, Map<ComponentType | RuleNodeType, Array<ComponentDescriptor>>>();
33 private componentsByClazz: Map<string, ComponentDescriptor> = new Map<string, ComponentDescriptor>(); 33 private componentsByClazz: Map<string, ComponentDescriptor> = new Map<string, ComponentDescriptor>();
34 34
35 constructor( 35 constructor(
@@ -37,14 +37,17 @@ export class ComponentDescriptorService { @@ -37,14 +37,17 @@ export class ComponentDescriptorService {
37 ) { 37 ) {
38 } 38 }
39 39
40 - public getComponentDescriptorsByType(componentType: ComponentType, config?: RequestConfig): Observable<Array<ComponentDescriptor>> {  
41 - const existing = this.componentsByType.get(componentType); 40 + public getComponentDescriptorsByType(componentType: ComponentType, ruleChainType: RuleChainType, config?: RequestConfig): Observable<Array<ComponentDescriptor>> {
  41 + if (!this.componentsByTypeByRuleChainType.get(ruleChainType)) {
  42 + this.componentsByTypeByRuleChainType.set(ruleChainType, new Map<ComponentType | RuleNodeType, Array<ComponentDescriptor>>());
  43 + }
  44 + const existing = this.componentsByTypeByRuleChainType.get(ruleChainType).get(componentType);
42 if (existing) { 45 if (existing) {
43 return of(existing); 46 return of(existing);
44 } else { 47 } else {
45 - return this.http.get<Array<ComponentDescriptor>>(`/api/components/${componentType}`, defaultHttpOptionsFromConfig(config)).pipe( 48 + return this.http.get<Array<ComponentDescriptor>>(`/api/components/${componentType}&ruleChainType=${ruleChainType}`, defaultHttpOptionsFromConfig(config)).pipe(
46 map((componentDescriptors) => { 49 map((componentDescriptors) => {
47 - this.componentsByType.set(componentType, componentDescriptors); 50 + this.componentsByTypeByRuleChainType.get(ruleChainType).set(componentType, componentDescriptors);
48 componentDescriptors.forEach((componentDescriptor) => { 51 componentDescriptors.forEach((componentDescriptor) => {
49 this.componentsByClazz.set(componentDescriptor.clazz, componentDescriptor); 52 this.componentsByClazz.set(componentDescriptor.clazz, componentDescriptor);
50 }); 53 });
@@ -55,10 +58,13 @@ export class ComponentDescriptorService { @@ -55,10 +58,13 @@ export class ComponentDescriptorService {
55 } 58 }
56 59
57 public getComponentDescriptorsByTypes(componentTypes: Array<ComponentType>, ruleChainType: RuleChainType, config?: RequestConfig): Observable<Array<ComponentDescriptor>> { 60 public getComponentDescriptorsByTypes(componentTypes: Array<ComponentType>, ruleChainType: RuleChainType, config?: RequestConfig): Observable<Array<ComponentDescriptor>> {
  61 + if (!this.componentsByTypeByRuleChainType.get(ruleChainType)) {
  62 + this.componentsByTypeByRuleChainType.set(ruleChainType, new Map<ComponentType | RuleNodeType, Array<ComponentDescriptor>>());
  63 + }
58 let result: ComponentDescriptor[] = []; 64 let result: ComponentDescriptor[] = [];
59 for (let i = componentTypes.length - 1; i >= 0; i--) { 65 for (let i = componentTypes.length - 1; i >= 0; i--) {
60 const componentType = componentTypes[i]; 66 const componentType = componentTypes[i];
61 - const componentDescriptors = this.componentsByType.get(componentType); 67 + const componentDescriptors = this.componentsByTypeByRuleChainType.get(ruleChainType).get(componentType);
62 if (componentDescriptors) { 68 if (componentDescriptors) {
63 result = result.concat(componentDescriptors); 69 result = result.concat(componentDescriptors);
64 componentTypes.splice(i, 1); 70 componentTypes.splice(i, 1);
@@ -71,10 +77,10 @@ export class ComponentDescriptorService { @@ -71,10 +77,10 @@ export class ComponentDescriptorService {
71 defaultHttpOptionsFromConfig(config)).pipe( 77 defaultHttpOptionsFromConfig(config)).pipe(
72 map((componentDescriptors) => { 78 map((componentDescriptors) => {
73 componentDescriptors.forEach((componentDescriptor) => { 79 componentDescriptors.forEach((componentDescriptor) => {
74 - let componentsList = this.componentsByType.get(componentDescriptor.type); 80 + let componentsList = this.componentsByTypeByRuleChainType.get(ruleChainType).get(componentDescriptor.type);
75 if (!componentsList) { 81 if (!componentsList) {
76 componentsList = new Array<ComponentDescriptor>(); 82 componentsList = new Array<ComponentDescriptor>();
77 - this.componentsByType.set(componentDescriptor.type, componentsList); 83 + this.componentsByTypeByRuleChainType.get(ruleChainType).set(componentDescriptor.type, componentsList);
78 } 84 }
79 componentsList.push(componentDescriptor); 85 componentsList.push(componentDescriptor);
80 this.componentsByClazz.set(componentDescriptor.clazz, componentDescriptor); 86 this.componentsByClazz.set(componentDescriptor.clazz, componentDescriptor);
@@ -28,7 +28,7 @@ import { UserService } from './user.service'; @@ -28,7 +28,7 @@ import { UserService } from './user.service';
28 import { DashboardService } from '@core/http/dashboard.service'; 28 import { DashboardService } from '@core/http/dashboard.service';
29 import { Direction } from '@shared/models/page/sort-order'; 29 import { Direction } from '@shared/models/page/sort-order';
30 import { PageData } from '@shared/models/page/page-data'; 30 import { PageData } from '@shared/models/page/page-data';
31 -import { getCurrentAuthUser } from '@core/auth/auth.selectors'; 31 +import { getCurrentAuthState, getCurrentAuthUser } from '@core/auth/auth.selectors';
32 import { Store } from '@ngrx/store'; 32 import { Store } from '@ngrx/store';
33 import { AppState } from '@core/core.state'; 33 import { AppState } from '@core/core.state';
34 import { Authority } from '@shared/models/authority.enum'; 34 import { Authority } from '@shared/models/authority.enum';
@@ -579,16 +579,18 @@ export class EntityService { @@ -579,16 +579,18 @@ export class EntityService {
579 579
580 public prepareAllowedEntityTypesList(allowedEntityTypes: Array<EntityType | AliasEntityType>, 580 public prepareAllowedEntityTypesList(allowedEntityTypes: Array<EntityType | AliasEntityType>,
581 useAliasEntityTypes?: boolean): Array<EntityType | AliasEntityType> { 581 useAliasEntityTypes?: boolean): Array<EntityType | AliasEntityType> {
582 - const authUser = getCurrentAuthUser(this.store); 582 + const authState = getCurrentAuthState(this.store);
583 const entityTypes: Array<EntityType | AliasEntityType> = []; 583 const entityTypes: Array<EntityType | AliasEntityType> = [];
584 - switch (authUser.authority) { 584 + switch (authState.authUser.authority) {
585 case Authority.SYS_ADMIN: 585 case Authority.SYS_ADMIN:
586 entityTypes.push(EntityType.TENANT); 586 entityTypes.push(EntityType.TENANT);
587 break; 587 break;
588 case Authority.TENANT_ADMIN: 588 case Authority.TENANT_ADMIN:
589 entityTypes.push(EntityType.DEVICE); 589 entityTypes.push(EntityType.DEVICE);
590 entityTypes.push(EntityType.ASSET); 590 entityTypes.push(EntityType.ASSET);
591 - entityTypes.push(EntityType.EDGE); 591 + if (authState.edgesSupportEnabled) {
  592 + entityTypes.push(EntityType.EDGE);
  593 + }
592 entityTypes.push(EntityType.ENTITY_VIEW); 594 entityTypes.push(EntityType.ENTITY_VIEW);
593 entityTypes.push(EntityType.TENANT); 595 entityTypes.push(EntityType.TENANT);
594 entityTypes.push(EntityType.CUSTOMER); 596 entityTypes.push(EntityType.CUSTOMER);
@@ -602,7 +604,9 @@ export class EntityService { @@ -602,7 +604,9 @@ export class EntityService {
602 case Authority.CUSTOMER_USER: 604 case Authority.CUSTOMER_USER:
603 entityTypes.push(EntityType.DEVICE); 605 entityTypes.push(EntityType.DEVICE);
604 entityTypes.push(EntityType.ASSET); 606 entityTypes.push(EntityType.ASSET);
605 - entityTypes.push(EntityType.EDGE); 607 + if (authState.edgesSupportEnabled) {
  608 + entityTypes.push(EntityType.EDGE);
  609 + }
606 entityTypes.push(EntityType.ENTITY_VIEW); 610 entityTypes.push(EntityType.ENTITY_VIEW);
607 entityTypes.push(EntityType.CUSTOMER); 611 entityTypes.push(EntityType.CUSTOMER);
608 entityTypes.push(EntityType.USER); 612 entityTypes.push(EntityType.USER);
@@ -614,7 +618,7 @@ export class EntityService { @@ -614,7 +618,7 @@ export class EntityService {
614 } 618 }
615 if (useAliasEntityTypes) { 619 if (useAliasEntityTypes) {
616 entityTypes.push(AliasEntityType.CURRENT_USER); 620 entityTypes.push(AliasEntityType.CURRENT_USER);
617 - if (authUser.authority !== Authority.SYS_ADMIN) { 621 + if (authState.authUser.authority !== Authority.SYS_ADMIN) {
618 entityTypes.push(AliasEntityType.CURRENT_USER_OWNER); 622 entityTypes.push(AliasEntityType.CURRENT_USER_OWNER);
619 } 623 }
620 } 624 }
@@ -51,7 +51,8 @@ import { Edge } from "@shared/models/edge.models"; @@ -51,7 +51,8 @@ import { Edge } from "@shared/models/edge.models";
51 }) 51 })
52 export class RuleChainService { 52 export class RuleChainService {
53 53
54 - private ruleNodeComponents: Array<RuleNodeComponentDescriptor>; 54 + private ruleNodeComponentsMap: Map<RuleChainType, Array<RuleNodeComponentDescriptor>> =
  55 + new Map<RuleChainType, Array<RuleNodeComponentDescriptor>>();
55 private ruleNodeConfigFactories: {[directive: string]: ComponentFactory<IRuleNodeConfigurationComponent>} = {}; 56 private ruleNodeConfigFactories: {[directive: string]: ComponentFactory<IRuleNodeConfigurationComponent>} = {};
56 57
57 constructor( 58 constructor(
@@ -120,16 +121,16 @@ export class RuleChainService { @@ -120,16 +121,16 @@ export class RuleChainService {
120 121
121 public getRuleNodeComponents(ruleNodeConfigResourcesModulesMap: {[key: string]: any}, ruleChainType: RuleChainType, config?: RequestConfig): 122 public getRuleNodeComponents(ruleNodeConfigResourcesModulesMap: {[key: string]: any}, ruleChainType: RuleChainType, config?: RequestConfig):
122 Observable<Array<RuleNodeComponentDescriptor>> { 123 Observable<Array<RuleNodeComponentDescriptor>> {
123 - if (this.ruleNodeComponents) {  
124 - return of(this.ruleNodeComponents); 124 + if (this.ruleNodeComponentsMap.get(ruleChainType)) {
  125 + return of(this.ruleNodeComponentsMap.get(ruleChainType));
125 } else { 126 } else {
126 return this.loadRuleNodeComponents(ruleChainType, config).pipe( 127 return this.loadRuleNodeComponents(ruleChainType, config).pipe(
127 mergeMap((components) => { 128 mergeMap((components) => {
128 return this.resolveRuleNodeComponentsUiResources(components, ruleNodeConfigResourcesModulesMap).pipe( 129 return this.resolveRuleNodeComponentsUiResources(components, ruleNodeConfigResourcesModulesMap).pipe(
129 map((ruleNodeComponents) => { 130 map((ruleNodeComponents) => {
130 - this.ruleNodeComponents = ruleNodeComponents;  
131 - this.ruleNodeComponents.push(ruleChainNodeComponent);  
132 - this.ruleNodeComponents.sort( 131 + this.ruleNodeComponentsMap.set(ruleChainType, ruleNodeComponents);
  132 + this.ruleNodeComponentsMap.get(ruleChainType).push(ruleChainNodeComponent);
  133 + this.ruleNodeComponentsMap.get(ruleChainType).sort(
133 (comp1, comp2) => { 134 (comp1, comp2) => {
134 let result = comp1.type.toString().localeCompare(comp2.type.toString()); 135 let result = comp1.type.toString().localeCompare(comp2.type.toString());
135 if (result === 0) { 136 if (result === 0) {
@@ -138,7 +139,7 @@ export class RuleChainService { @@ -138,7 +139,7 @@ export class RuleChainService {
138 return result; 139 return result;
139 } 140 }
140 ); 141 );
141 - return this.ruleNodeComponents; 142 + return this.ruleNodeComponentsMap.get(ruleChainType);
142 }) 143 })
143 ); 144 );
144 }) 145 })
@@ -151,7 +152,11 @@ export class RuleChainService { @@ -151,7 +152,11 @@ export class RuleChainService {
151 } 152 }
152 153
153 public getRuleNodeComponentByClazz(clazz: string): RuleNodeComponentDescriptor { 154 public getRuleNodeComponentByClazz(clazz: string): RuleNodeComponentDescriptor {
154 - const found = this.ruleNodeComponents.filter((component) => component.clazz === clazz); 155 + let mergedRuleNodeComponents: RuleNodeComponentDescriptor[] = [];
  156 + this.ruleNodeComponentsMap.forEach((value: Array<RuleNodeComponentDescriptor>, key: RuleChainType) => {
  157 + mergedRuleNodeComponents = mergedRuleNodeComponents.concat(value);
  158 + });
  159 + const found = mergedRuleNodeComponents.filter((component) => component.clazz === clazz);
155 if (found && found.length) { 160 if (found && found.length) {
156 return found[0]; 161 return found[0];
157 } else { 162 } else {
@@ -18,14 +18,13 @@ import { Injectable } from '@angular/core'; @@ -18,14 +18,13 @@ import { Injectable } from '@angular/core';
18 import { AuthService } from '../auth/auth.service'; 18 import { AuthService } from '../auth/auth.service';
19 import { select, Store } from '@ngrx/store'; 19 import { select, Store } from '@ngrx/store';
20 import { AppState } from '../core.state'; 20 import { AppState } from '../core.state';
21 -import {selectAuth, selectAuthUser, selectIsAuthenticated} from '../auth/auth.selectors'; 21 +import { selectAuth, selectAuthUser, selectIsAuthenticated } from '../auth/auth.selectors';
22 import { take } from 'rxjs/operators'; 22 import { take } from 'rxjs/operators';
23 import { HomeSection, MenuSection } from '@core/services/menu.models'; 23 import { HomeSection, MenuSection } from '@core/services/menu.models';
24 import { BehaviorSubject, Observable, Subject } from 'rxjs'; 24 import { BehaviorSubject, Observable, Subject } from 'rxjs';
25 import { Authority } from '@shared/models/authority.enum'; 25 import { Authority } from '@shared/models/authority.enum';
26 -import { AuthUser } from '@shared/models/user.model';  
27 import { guid } from '@core/utils'; 26 import { guid } from '@core/utils';
28 -import {AuthState} from "@core/auth/auth.models"; 27 +import { AuthState } from "@core/auth/auth.models";
29 28
30 @Injectable({ 29 @Injectable({
31 providedIn: 'root' 30 providedIn: 'root'
@@ -282,14 +281,14 @@ export class MenuService { @@ -282,14 +281,14 @@ export class MenuService {
282 pages: [ 281 pages: [
283 { 282 {
284 id: guid(), 283 id: guid(),
285 - name: 'edge.edges', 284 + name: 'edge.edge-instances',
286 type: 'link', 285 type: 'link',
287 path: '/edges', 286 path: '/edges',
288 icon: 'router' 287 icon: 'router'
289 }, 288 },
290 { 289 {
291 id: guid(), 290 id: guid(),
292 - name: 'rulechain.edge-rulechains', 291 + name: 'edge.rulechain-templates',
293 type: 'link', 292 type: 'link',
294 path: '/edges/ruleChains', 293 path: '/edges/ruleChains',
295 icon: 'settings_ethernet' 294 icon: 'settings_ethernet'
@@ -398,12 +397,12 @@ export class MenuService { @@ -398,12 +397,12 @@ export class MenuService {
398 name: 'edge.management', 397 name: 'edge.management',
399 places: [ 398 places: [
400 { 399 {
401 - name: 'edge.edges', 400 + name: 'edge.edge-instances',
402 icon: 'router', 401 icon: 'router',
403 path: '/edges' 402 path: '/edges'
404 }, 403 },
405 { 404 {
406 - name: 'rulechain.edge-rulechains', 405 + name: 'edge.rulechain-templates',
407 icon: 'settings_ethernet', 406 icon: 'settings_ethernet',
408 path: '/edges/ruleChains' 407 path: '/edges/ruleChains'
409 } 408 }
@@ -476,7 +475,20 @@ export class MenuService { @@ -476,7 +475,20 @@ export class MenuService {
476 type: 'link', 475 type: 'link',
477 path: '/entityViews', 476 path: '/entityViews',
478 icon: 'view_quilt' 477 icon: 'view_quilt'
479 - }, 478 + }
  479 + );
  480 + if (authState.edgesSupportEnabled) {
  481 + sections.push(
  482 + {
  483 + id: guid(),
  484 + name: 'edge.edge-instances',
  485 + type: 'link',
  486 + path: '/edges',
  487 + icon: 'router'
  488 + }
  489 + );
  490 + }
  491 + sections.push(
480 { 492 {
481 id: guid(), 493 id: guid(),
482 name: 'dashboard.dashboards', 494 name: 'dashboard.dashboards',
@@ -489,7 +501,8 @@ export class MenuService { @@ -489,7 +501,8 @@ export class MenuService {
489 } 501 }
490 502
491 private buildCustomerUserHome(authState: AuthState): Array<HomeSection> { 503 private buildCustomerUserHome(authState: AuthState): Array<HomeSection> {
492 - const homeSections: Array<HomeSection> = [ 504 + const homeSections: Array<HomeSection> = [];
  505 + homeSections.push(
493 { 506 {
494 name: 'asset.view-assets', 507 name: 'asset.view-assets',
495 places: [ 508 places: [
@@ -519,7 +532,23 @@ export class MenuService { @@ -519,7 +532,23 @@ export class MenuService {
519 path: '/entityViews' 532 path: '/entityViews'
520 } 533 }
521 ] 534 ]
522 - }, 535 + }
  536 + );
  537 + if (authState.edgesSupportEnabled) {
  538 + homeSections.push(
  539 + {
  540 + name: 'edge.management',
  541 + places: [
  542 + {
  543 + name: 'edge.edge-instances',
  544 + icon: 'router',
  545 + path: '/edges'
  546 + }
  547 + ]
  548 + }
  549 + );
  550 + }
  551 + homeSections.push(
523 { 552 {
524 name: 'dashboard.view-dashboards', 553 name: 'dashboard.view-dashboards',
525 places: [ 554 places: [
@@ -530,7 +559,7 @@ export class MenuService { @@ -530,7 +559,7 @@ export class MenuService {
530 } 559 }
531 ] 560 ]
532 } 561 }
533 - ]; 562 + );
534 return homeSections; 563 return homeSections;
535 } 564 }
536 565
@@ -250,7 +250,7 @@ export class AttributeTableComponent extends PageComponent implements AfterViewI @@ -250,7 +250,7 @@ export class AttributeTableComponent extends PageComponent implements AfterViewI
250 250
251 resetSortAndFilter(update: boolean = true) { 251 resetSortAndFilter(update: boolean = true) {
252 const entityType = this.entityIdValue.entityType; 252 const entityType = this.entityIdValue.entityType;
253 - if (entityType === EntityType.DEVICE || entityType === EntityType.ENTITY_VIEW || entityType === EntityType.EDGE) { 253 + if (entityType === EntityType.DEVICE || entityType === EntityType.ENTITY_VIEW) {
254 this.attributeScopes = Object.keys(AttributeScope); 254 this.attributeScopes = Object.keys(AttributeScope);
255 this.attributeScopeSelectionReadonly = false; 255 this.attributeScopeSelectionReadonly = false;
256 } else { 256 } else {
@@ -239,7 +239,7 @@ export class AssetsTableConfigResolver implements Resolve<EntityTableConfig<Asse @@ -239,7 +239,7 @@ export class AssetsTableConfigResolver implements Resolve<EntityTableConfig<Asse
239 actions.push( 239 actions.push(
240 { 240 {
241 name: this.translate.instant('edge.unassign-from-edge'), 241 name: this.translate.instant('edge.unassign-from-edge'),
242 - icon: 'portable_wifi_off', 242 + icon: 'assignment_return',
243 isEnabled: (entity) => true, 243 isEnabled: (entity) => true,
244 onAction: ($event, entity) => this.unassignFromEdge($event, entity) 244 onAction: ($event, entity) => this.unassignFromEdge($event, entity)
245 } 245 }
@@ -274,7 +274,7 @@ export class AssetsTableConfigResolver implements Resolve<EntityTableConfig<Asse @@ -274,7 +274,7 @@ export class AssetsTableConfigResolver implements Resolve<EntityTableConfig<Asse
274 actions.push( 274 actions.push(
275 { 275 {
276 name: this.translate.instant('asset.unassign-assets-from-edge'), 276 name: this.translate.instant('asset.unassign-assets-from-edge'),
277 - icon: 'portable_wifi_off', 277 + icon: 'assignment_return',
278 isEnabled: true, 278 isEnabled: true,
279 onAction: ($event, entities) => this.unassignAssetsFromEdge($event, entities) 279 onAction: ($event, entities) => this.unassignAssetsFromEdge($event, entities)
280 } 280 }
@@ -257,7 +257,7 @@ export class DashboardsTableConfigResolver implements Resolve<EntityTableConfig< @@ -257,7 +257,7 @@ export class DashboardsTableConfigResolver implements Resolve<EntityTableConfig<
257 }, 257 },
258 { 258 {
259 name: this.translate.instant('edge.unassign-from-edge'), 259 name: this.translate.instant('edge.unassign-from-edge'),
260 - icon: 'portable_wifi_off', 260 + icon: 'assignment_return',
261 isEnabled: (entity) => true, 261 isEnabled: (entity) => true,
262 onAction: ($event, entity) => this.unassignFromEdge($event, entity) 262 onAction: ($event, entity) => this.unassignFromEdge($event, entity)
263 } 263 }
@@ -301,7 +301,7 @@ export class DashboardsTableConfigResolver implements Resolve<EntityTableConfig< @@ -301,7 +301,7 @@ export class DashboardsTableConfigResolver implements Resolve<EntityTableConfig<
301 actions.push( 301 actions.push(
302 { 302 {
303 name: this.translate.instant('dashboard.unassign-dashboards-from-edge'), 303 name: this.translate.instant('dashboard.unassign-dashboards-from-edge'),
304 - icon: 'portable_wifi_off', 304 + icon: 'assignment_return',
305 isEnabled: true, 305 isEnabled: true,
306 onAction: ($event, entities) => this.unassignDashboardsFromEdge($event, entities) 306 onAction: ($event, entities) => this.unassignDashboardsFromEdge($event, entities)
307 } 307 }
@@ -281,7 +281,7 @@ export class DevicesTableConfigResolver implements Resolve<EntityTableConfig<Dev @@ -281,7 +281,7 @@ export class DevicesTableConfigResolver implements Resolve<EntityTableConfig<Dev
281 actions.push( 281 actions.push(
282 { 282 {
283 name: this.translate.instant('edge.unassign-from-edge'), 283 name: this.translate.instant('edge.unassign-from-edge'),
284 - icon: 'portable_wifi_off', 284 + icon: 'assignment_return',
285 isEnabled: (entity) => true, 285 isEnabled: (entity) => true,
286 onAction: ($event, entity) => this.unassignFromEdge($event, entity) 286 onAction: ($event, entity) => this.unassignFromEdge($event, entity)
287 } 287 }
@@ -315,10 +315,10 @@ export class DevicesTableConfigResolver implements Resolve<EntityTableConfig<Dev @@ -315,10 +315,10 @@ export class DevicesTableConfigResolver implements Resolve<EntityTableConfig<Dev
315 if (deviceScope === 'edge') { 315 if (deviceScope === 'edge') {
316 actions.push( 316 actions.push(
317 { 317 {
318 - name: this.translate.instant('asset.unassign-assets-from-edge'),  
319 - icon: 'portable_wifi_off', 318 + name: this.translate.instant('device.unassign-devices-from-edge'),
  319 + icon: 'assignment_return',
320 isEnabled: true, 320 isEnabled: true,
321 - onAction: ($event, entities) => this.unassignDevicesFromCustomer($event, entities) 321 + onAction: ($event, entities) => this.unassignDevicesFromEdge($event, entities)
322 } 322 }
323 ); 323 );
324 } 324 }
@@ -42,7 +42,7 @@ const routes: Routes = [ @@ -42,7 +42,7 @@ const routes: Routes = [
42 path: 'edges', 42 path: 'edges',
43 data: { 43 data: {
44 breadcrumb: { 44 breadcrumb: {
45 - label: 'edge.edges', 45 + label: 'edge.edge-instances',
46 icon: 'router' 46 icon: 'router'
47 } 47 }
48 }, 48 },
@@ -65,7 +65,7 @@ const routes: Routes = [ @@ -65,7 +65,7 @@ const routes: Routes = [
65 auth: [Authority.TENANT_ADMIN], 65 auth: [Authority.TENANT_ADMIN],
66 ruleChainsType: 'edge', 66 ruleChainsType: 'edge',
67 breadcrumb: { 67 breadcrumb: {
68 - label: 'rulechain.edge-rulechains', 68 + label: 'edge.rulechain-templates',
69 icon: 'settings_ethernet' 69 icon: 'settings_ethernet'
70 }, 70 },
71 }, 71 },
@@ -131,7 +131,7 @@ const routes: Routes = [ @@ -131,7 +131,7 @@ const routes: Routes = [
131 path: '', 131 path: '',
132 component: EntitiesTableComponent, 132 component: EntitiesTableComponent,
133 data: { 133 data: {
134 - auth: [Authority.TENANT_ADMIN], 134 + auth: [Authority.TENANT_ADMIN, Authority.CUSTOMER_USER],
135 dashboardsType: 'edge' 135 dashboardsType: 'edge'
136 }, 136 },
137 resolve: { 137 resolve: {
@@ -160,7 +160,7 @@ const routes: Routes = [ @@ -160,7 +160,7 @@ const routes: Routes = [
160 path: 'ruleChains', 160 path: 'ruleChains',
161 data: { 161 data: {
162 breadcrumb: { 162 breadcrumb: {
163 - label: 'rulechain.edge-rulechains', 163 + label: 'edge.rulechain-templates',
164 icon: 'settings_ethernet' 164 icon: 'settings_ethernet'
165 } 165 }
166 }, 166 },
@@ -170,7 +170,7 @@ const routes: Routes = [ @@ -170,7 +170,7 @@ const routes: Routes = [
170 component: EntitiesTableComponent, 170 component: EntitiesTableComponent,
171 data: { 171 data: {
172 auth: [Authority.TENANT_ADMIN], 172 auth: [Authority.TENANT_ADMIN],
173 - title: 'rulechain.edge-rulechains', 173 + title: 'edge.rulechain-templates',
174 ruleChainsType: 'edges' 174 ruleChainsType: 'edges'
175 }, 175 },
176 resolve: { 176 resolve: {
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 --> 17 -->
18 <mat-tab *ngIf="entity" 18 <mat-tab *ngIf="entity"
19 label="{{ 'attribute.attributes' | translate }}" #attributesTab="matTab"> 19 label="{{ 'attribute.attributes' | translate }}" #attributesTab="matTab">
20 - <tb-attribute-table [defaultAttributeScope]="attributeScopes.CLIENT_SCOPE" 20 + <tb-attribute-table [defaultAttributeScope]="attributeScopes.SERVER_SCOPE"
21 [active]="attributesTab.isActive" 21 [active]="attributesTab.isActive"
22 [entityId]="entity.id" 22 [entityId]="entity.id"
23 [entityName]="entity.name"> 23 [entityName]="entity.name">
@@ -34,36 +34,6 @@ @@ -34,36 +34,6 @@
34 [fxShow]="!isEdit && (edgeScope === 'customer' || edgeScope === 'tenant') && isAssignedToCustomer(entity)"> 34 [fxShow]="!isEdit && (edgeScope === 'customer' || edgeScope === 'tenant') && isAssignedToCustomer(entity)">
35 {{ (entity?.customerIsPublic ? 'edge.make-private' : 'edge.unassign-from-customer') | translate }} 35 {{ (entity?.customerIsPublic ? 'edge.make-private' : 'edge.unassign-from-customer') | translate }}
36 </button> 36 </button>
37 - <button mat-raised-button color="primary"  
38 - [disabled]="(isLoading$ | async)"  
39 - (click)="onEntityAction($event, 'openEdgeAssets')"  
40 - [fxShow]="!isEdit && edgeScope === 'tenant'">  
41 - {{'edge.manage-edge-assets' | translate }}  
42 - </button>  
43 - <button mat-raised-button color="primary"  
44 - [disabled]="(isLoading$ | async)"  
45 - (click)="onEntityAction($event, 'openEdgeDevices')"  
46 - [fxShow]="!isEdit && edgeScope === 'tenant'">  
47 - {{'edge.manage-edge-devices' | translate }}  
48 - </button>  
49 - <button mat-raised-button color="primary"  
50 - [disabled]="(isLoading$ | async)"  
51 - (click)="onEntityAction($event, 'openEdgeEntityViews')"  
52 - [fxShow]="!isEdit && edgeScope === 'tenant'">  
53 - {{'edge.manage-edge-entity-views' | translate }}  
54 - </button>  
55 - <button mat-raised-button color="primary"  
56 - [disabled]="(isLoading$ | async)"  
57 - (click)="onEntityAction($event, 'openEdgeDashboards')"  
58 - [fxShow]="!isEdit && edgeScope === 'tenant'">  
59 - {{'edge.manage-edge-dashboards' | translate }}  
60 - </button>  
61 - <button mat-raised-button color="primary"  
62 - [disabled]="(isLoading$ | async)"  
63 - (click)="onEntityAction($event, 'openEdgeRuleChains')"  
64 - [fxShow]="!isEdit && edgeScope === 'tenant'">  
65 - {{'edge.manage-edge-rulechains' | translate }}  
66 - </button>  
67 <button mat-raised-button color="primary" fxFlex.xs 37 <button mat-raised-button color="primary" fxFlex.xs
68 [disabled]="(isLoading$ | async)" 38 [disabled]="(isLoading$ | async)"
69 (click)="onEntityAction($event, 'delete')" 39 (click)="onEntityAction($event, 'delete')"
@@ -71,6 +41,38 @@ @@ -71,6 +41,38 @@
71 {{'edge.delete' | translate }} 41 {{'edge.delete' | translate }}
72 </button> 42 </button>
73 <div fxLayout="row" fxLayout.xs="column"> 43 <div fxLayout="row" fxLayout.xs="column">
  44 + <button mat-raised-button color="primary"
  45 + [disabled]="(isLoading$ | async)"
  46 + (click)="onEntityAction($event, 'openEdgeAssets')"
  47 + [fxShow]="!isEdit && edgeScope === 'tenant'">
  48 + {{'edge.manage-edge-assets' | translate }}
  49 + </button>
  50 + <button mat-raised-button color="primary"
  51 + [disabled]="(isLoading$ | async)"
  52 + (click)="onEntityAction($event, 'openEdgeDevices')"
  53 + [fxShow]="!isEdit && edgeScope === 'tenant'">
  54 + {{'edge.manage-edge-devices' | translate }}
  55 + </button>
  56 + <button mat-raised-button color="primary"
  57 + [disabled]="(isLoading$ | async)"
  58 + (click)="onEntityAction($event, 'openEdgeEntityViews')"
  59 + [fxShow]="!isEdit && edgeScope === 'tenant'">
  60 + {{'edge.manage-edge-entity-views' | translate }}
  61 + </button>
  62 + <button mat-raised-button color="primary"
  63 + [disabled]="(isLoading$ | async)"
  64 + (click)="onEntityAction($event, 'openEdgeDashboards')"
  65 + [fxShow]="!isEdit && edgeScope === 'tenant'">
  66 + {{'edge.manage-edge-dashboards' | translate }}
  67 + </button>
  68 + <button mat-raised-button color="primary"
  69 + [disabled]="(isLoading$ | async)"
  70 + (click)="onEntityAction($event, 'openEdgeRuleChains')"
  71 + [fxShow]="!isEdit && edgeScope === 'tenant'">
  72 + {{'edge.manage-edge-rulechains' | translate }}
  73 + </button>
  74 + </div>
  75 + <div fxLayout="row" fxLayout.xs="column">
74 <button mat-raised-button 76 <button mat-raised-button
75 ngxClipboard 77 ngxClipboard
76 (cbOnSuccess)="onEdgeIdCopied($event)" 78 (cbOnSuccess)="onEdgeIdCopied($event)"
@@ -95,7 +97,6 @@ @@ -95,7 +97,6 @@
95 <mat-icon svgIcon="mdi:clipboard-arrow-left"></mat-icon> 97 <mat-icon svgIcon="mdi:clipboard-arrow-left"></mat-icon>
96 <span translate>edge.copy-edge-secret</span> 98 <span translate>edge.copy-edge-secret</span>
97 </button> 99 </button>
98 -  
99 </div> 100 </div>
100 </div> 101 </div>
101 <div class="mat-padding" fxLayout="column"> 102 <div class="mat-padding" fxLayout="column">
@@ -123,18 +124,6 @@ @@ -123,18 +124,6 @@
123 [required]="true" 124 [required]="true"
124 [entityType]="entityType.EDGE"> 125 [entityType]="entityType.EDGE">
125 </tb-entity-subtype-autocomplete> 126 </tb-entity-subtype-autocomplete>
126 - <mat-form-field class="mat-block">  
127 - <mat-label translate>edge.label</mat-label>  
128 - <input matInput formControlName="label">  
129 - </mat-form-field>  
130 -  
131 - <div formGroupName="additionalInfo" fxLayout="column">  
132 - <mat-form-field class="mat-block">  
133 - <mat-label translate>edge.description</mat-label>  
134 - <textarea matInput formControlName="description" rows="2"></textarea>  
135 - </mat-form-field>  
136 - </div>  
137 - </fieldset>  
138 <div fxLayout="row"> 127 <div fxLayout="row">
139 <fieldset fxFlex> 128 <fieldset fxFlex>
140 <mat-form-field class="mat-block"> 129 <mat-form-field class="mat-block">
@@ -163,7 +152,7 @@ @@ -163,7 +152,7 @@
163 <mat-label translate>edge.edge-key</mat-label> 152 <mat-label translate>edge.edge-key</mat-label>
164 <input matInput formControlName="routingKey"> 153 <input matInput formControlName="routingKey">
165 </mat-form-field> 154 </mat-form-field>
166 - </fieldset> 155 + </fieldset>
167 </div> 156 </div>
168 <div fxLayout="row"> 157 <div fxLayout="row">
169 <fieldset fxFlex disabled> 158 <fieldset fxFlex disabled>
@@ -173,5 +162,16 @@ @@ -173,5 +162,16 @@
173 </mat-form-field> 162 </mat-form-field>
174 </fieldset> 163 </fieldset>
175 </div> 164 </div>
  165 + <mat-form-field class="mat-block">
  166 + <mat-label translate>edge.label</mat-label>
  167 + <input matInput formControlName="label">
  168 + </mat-form-field>
  169 + <div formGroupName="additionalInfo" fxLayout="column">
  170 + <mat-form-field class="mat-block">
  171 + <mat-label translate>edge.description</mat-label>
  172 + <textarea matInput formControlName="description" rows="2"></textarea>
  173 + </mat-form-field>
  174 + </div>
  175 + </fieldset>
176 </form> 176 </form>
177 </div> 177 </div>
@@ -122,10 +122,10 @@ export class EdgesTableConfigResolver implements Resolve<EntityTableConfig<EdgeI @@ -122,10 +122,10 @@ export class EdgesTableConfigResolver implements Resolve<EntityTableConfig<EdgeI
122 if (parentCustomer.additionalInfo && parentCustomer.additionalInfo.isPublic) { 122 if (parentCustomer.additionalInfo && parentCustomer.additionalInfo.isPublic) {
123 this.config.tableTitle = this.translate.instant('customer.public-edges'); 123 this.config.tableTitle = this.translate.instant('customer.public-edges');
124 } else { 124 } else {
125 - this.config.tableTitle = parentCustomer.title + ': ' + this.translate.instant('edge.edges'); 125 + this.config.tableTitle = parentCustomer.title + ': ' + this.translate.instant('edge.edge-instances');
126 } 126 }
127 } else { 127 } else {
128 - this.config.tableTitle = this.translate.instant('edge.edges'); 128 + this.config.tableTitle = this.translate.instant('edge.edge-instances');
129 } 129 }
130 this.config.columns = this.configureColumns(this.config.componentsData.edgeScope); 130 this.config.columns = this.configureColumns(this.config.componentsData.edgeScope);
131 this.configureEntityFunctions(this.config.componentsData.edgeScope); 131 this.configureEntityFunctions(this.config.componentsData.edgeScope);
@@ -170,6 +170,11 @@ export class EdgesTableConfigResolver implements Resolve<EntityTableConfig<EdgeI @@ -170,6 +170,11 @@ export class EdgesTableConfigResolver implements Resolve<EntityTableConfig<EdgeI
170 this.edgeService.getCustomerEdgeInfos(this.customerId, pageLink); 170 this.edgeService.getCustomerEdgeInfos(this.customerId, pageLink);
171 this.config.deleteEntity = id => this.edgeService.unassignEdgeFromCustomer(id.id); 171 this.config.deleteEntity = id => this.edgeService.unassignEdgeFromCustomer(id.id);
172 } 172 }
  173 + if (edgeScope === 'customer_user') {
  174 + this.config.entitiesFetchFunction = pageLink =>
  175 + this.edgeService.getCustomerEdgeInfos(this.customerId, pageLink);
  176 + this.config.deleteEntity = id => this.edgeService.unassignEdgeFromCustomer(id.id);
  177 + }
173 } 178 }
174 179
175 configureCellActions(edgeScope: string): Array<CellActionDescriptor<EdgeInfo>> { 180 configureCellActions(edgeScope: string): Array<CellActionDescriptor<EdgeInfo>> {
@@ -239,7 +239,7 @@ export class EntityViewsTableConfigResolver implements Resolve<EntityTableConfig @@ -239,7 +239,7 @@ export class EntityViewsTableConfigResolver implements Resolve<EntityTableConfig
239 actions.push( 239 actions.push(
240 { 240 {
241 name: this.translate.instant('edge.unassign-from-edge'), 241 name: this.translate.instant('edge.unassign-from-edge'),
242 - icon: 'portable_wifi_off', 242 + icon: 'assignment_return',
243 isEnabled: (entity) => true, 243 isEnabled: (entity) => true,
244 onAction: ($event, entity) => this.unassignFromEdge($event, entity) 244 onAction: ($event, entity) => this.unassignFromEdge($event, entity)
245 } 245 }
@@ -274,7 +274,7 @@ export class EntityViewsTableConfigResolver implements Resolve<EntityTableConfig @@ -274,7 +274,7 @@ export class EntityViewsTableConfigResolver implements Resolve<EntityTableConfig
274 actions.push( 274 actions.push(
275 { 275 {
276 name: this.translate.instant('entity-view.unassign-entity-views-from-edge'), 276 name: this.translate.instant('entity-view.unassign-entity-views-from-edge'),
277 - icon: 'portable_wifi_off', 277 + icon: 'assignment_return',
278 isEnabled: true, 278 isEnabled: true,
279 onAction: ($event, entities) => this.unassignEntityViewsFromEdge($event, entities) 279 onAction: ($event, entities) => this.unassignEntityViewsFromEdge($event, entities)
280 } 280 }
@@ -101,7 +101,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig< @@ -101,7 +101,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
101 this.config.entitySelectionEnabled = ruleChain => this.config.componentsData.edge.rootRuleChainId.id != ruleChain.id.id; 101 this.config.entitySelectionEnabled = ruleChain => this.config.componentsData.edge.rootRuleChainId.id != ruleChain.id.id;
102 this.edgeService.getEdge(this.config.componentsData.edgeId).subscribe(edge => { 102 this.edgeService.getEdge(this.config.componentsData.edgeId).subscribe(edge => {
103 this.config.componentsData.edge = edge; 103 this.config.componentsData.edge = edge;
104 - this.config.tableTitle = edge.name + ': ' + this.translate.instant('rulechain.edge-rulechains'); 104 + this.config.tableTitle = edge.name + ': ' + this.translate.instant('edge.rulechain-templates');
105 }); 105 });
106 this.config.entitiesDeleteEnabled = false; 106 this.config.entitiesDeleteEnabled = false;
107 } 107 }
@@ -128,7 +128,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig< @@ -128,7 +128,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
128 columns.push( 128 columns.push(
129 new DateEntityTableColumn<RuleChain>('createdTime', 'common.created-time', this.datePipe, '150px'), 129 new DateEntityTableColumn<RuleChain>('createdTime', 'common.created-time', this.datePipe, '150px'),
130 new EntityTableColumn<RuleChain>('name', 'rulechain.name', '100%'), 130 new EntityTableColumn<RuleChain>('name', 'rulechain.name', '100%'),
131 - new EntityTableColumn<RuleChain>('root', 'rulechain.default-root', '60px', 131 + new EntityTableColumn<RuleChain>('root', 'rulechain.root', '60px',
132 entity => { 132 entity => {
133 return checkBoxCell(entity.root); 133 return checkBoxCell(entity.root);
134 }) 134 })
@@ -173,7 +173,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig< @@ -173,7 +173,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
173 this.config.tableTitle = this.translate.instant('rulechain.rulechains'); 173 this.config.tableTitle = this.translate.instant('rulechain.rulechains');
174 this.config.entitiesFetchFunction = pageLink => this.fetchRuleChains(pageLink); 174 this.config.entitiesFetchFunction = pageLink => this.fetchRuleChains(pageLink);
175 } else if (ruleChainScope === 'edges') { 175 } else if (ruleChainScope === 'edges') {
176 - this.config.tableTitle = this.translate.instant('rulechain.edge-rulechains'); 176 + this.config.tableTitle = this.translate.instant('edge.rulechain-templates');
177 this.config.entitiesFetchFunction = pageLink => this.fetchEdgeRuleChains(pageLink); 177 this.config.entitiesFetchFunction = pageLink => this.fetchEdgeRuleChains(pageLink);
178 } else if (ruleChainScope === 'edge') { 178 } else if (ruleChainScope === 'edge') {
179 this.config.entitiesFetchFunction = pageLink => this.ruleChainService.getEdgeRuleChains(this.config.componentsData.edgeId, pageLink); 179 this.config.entitiesFetchFunction = pageLink => this.ruleChainService.getEdgeRuleChains(this.config.componentsData.edgeId, pageLink);
@@ -186,7 +186,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig< @@ -186,7 +186,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
186 actions.push( 186 actions.push(
187 { 187 {
188 name: this.translate.instant('rulechain.unassign-rulechains'), 188 name: this.translate.instant('rulechain.unassign-rulechains'),
189 - icon: 'portable_wifi_off', 189 + icon: 'assignment_return',
190 isEnabled: true, 190 isEnabled: true,
191 onAction: ($event, entities) => this.unassignRuleChainsFromEdge($event, entities) 191 onAction: ($event, entities) => this.unassignRuleChainsFromEdge($event, entities)
192 } 192 }
@@ -232,7 +232,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig< @@ -232,7 +232,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
232 onAction: ($event, entity) => this.setDefaultRootEdgeRuleChain($event, entity) 232 onAction: ($event, entity) => this.setDefaultRootEdgeRuleChain($event, entity)
233 }, 233 },
234 { 234 {
235 - name: this.translate.instant('rulechain.set-default-edge'), 235 + name: this.translate.instant('rulechain.set-auto-assign-to-edge'),
236 icon: 'bookmark_outline', 236 icon: 'bookmark_outline',
237 isEnabled: (entity) => this.isNonDefaultEdgeRuleChain(entity), 237 isEnabled: (entity) => this.isNonDefaultEdgeRuleChain(entity),
238 onAction: ($event, entity) => this.setDefaultEdgeRuleChain($event, entity) 238 onAction: ($event, entity) => this.setDefaultEdgeRuleChain($event, entity)
@@ -255,7 +255,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig< @@ -255,7 +255,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
255 }, 255 },
256 { 256 {
257 name: this.translate.instant('edge.unassign-from-edge'), 257 name: this.translate.instant('edge.unassign-from-edge'),
258 - icon: 'portable_wifi_off', 258 + icon: 'assignment_return',
259 isEnabled: (entity) => entity.id.id != this.config.componentsData.edge.rootRuleChainId.id, 259 isEnabled: (entity) => entity.id.id != this.config.componentsData.edge.rootRuleChainId.id,
260 onAction: ($event, entity) => this.unassignFromEdge($event, entity) 260 onAction: ($event, entity) => this.unassignFromEdge($event, entity)
261 } 261 }
@@ -449,8 +449,8 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig< @@ -449,8 +449,8 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
449 $event.stopPropagation(); 449 $event.stopPropagation();
450 } 450 }
451 this.dialogService.confirm( 451 this.dialogService.confirm(
452 - this.translate.instant('rulechain.set-default-edge-title', {ruleChainName: ruleChain.name}),  
453 - this.translate.instant('rulechain.set-default-edge-text'), 452 + this.translate.instant('rulechain.set-auto-assign-to-edge-title', {ruleChainName: ruleChain.name}),
  453 + this.translate.instant('rulechain.set-auto-assign-to-edge-text'),
454 this.translate.instant('action.no'), 454 this.translate.instant('action.no'),
455 this.translate.instant('action.yes'), 455 this.translate.instant('action.yes'),
456 true 456 true
@@ -419,7 +419,6 @@ @@ -419,7 +419,6 @@
419 "manage-assets": "Objekte verwalten", 419 "manage-assets": "Objekte verwalten",
420 "manage-devices": "Geräte verwalten", 420 "manage-devices": "Geräte verwalten",
421 "manage-dashboards": "Dashboards verwalten", 421 "manage-dashboards": "Dashboards verwalten",
422 - "manage-edges": "Öffentliche Rand",  
423 "title": "Titel", 422 "title": "Titel",
424 "title-required": "Titel ist erforderlich.", 423 "title-required": "Titel ist erforderlich.",
425 "description": "Beschreibung", 424 "description": "Beschreibung",
@@ -582,7 +581,6 @@ @@ -582,7 +581,6 @@
582 "select-state": "Soll-Zustand auswählen", 581 "select-state": "Soll-Zustand auswählen",
583 "state-controller": "Zustandssteuerung", 582 "state-controller": "Zustandssteuerung",
584 "unassign-dashboard-from-edge-text": "Nach der Bestätigung wird die Zuordnung des Dashboards aufgehoben und es ist für der Rand nicht mehr zugänglich.", 583 "unassign-dashboard-from-edge-text": "Nach der Bestätigung wird die Zuordnung des Dashboards aufgehoben und es ist für der Rand nicht mehr zugänglich.",
585 - "unassign-dashboards-from-edge-action-title": "Zuordnung { count, plural, 1 {1 Dashboard} other {# Dashboards} } vom Rand aufheben",  
586 "unassign-dashboards-from-edge-text": "Nach der Bestätigung wird die Zuordnung aller ausgewählten Dashboards aufgehoben und sie sind für den Rand nicht mehr zugänglich.", 584 "unassign-dashboards-from-edge-text": "Nach der Bestätigung wird die Zuordnung aller ausgewählten Dashboards aufgehoben und sie sind für den Rand nicht mehr zugänglich.",
587 "assign-dashboard-to-edge": "Dashboard(s) dem Rand zuordnen", 585 "assign-dashboard-to-edge": "Dashboard(s) dem Rand zuordnen",
588 "assign-dashboard-to-edge-text": "Bitte wählen Sie die Dashboards aus, die Sie dem Rand zuordnen möchten" 586 "assign-dashboard-to-edge-text": "Bitte wählen Sie die Dashboards aus, die Sie dem Rand zuordnen möchten"
@@ -717,12 +715,9 @@ @@ -717,12 +715,9 @@
717 "public": "Öffentlich", 715 "public": "Öffentlich",
718 "device-public": "Gerät ist öffentlich", 716 "device-public": "Gerät ist öffentlich",
719 "select-device": "Gerät auswählen", 717 "select-device": "Gerät auswählen",
720 - "assign-device-to-edge": "Dashboard(s) dem Gerät zuordnen",  
721 "assign-device-to-edge-text":"Bitte wählen Sie die Geräte aus, die Sie dem Rand zuordnen möchten", 718 "assign-device-to-edge-text":"Bitte wählen Sie die Geräte aus, die Sie dem Rand zuordnen möchten",
722 "unassign-device-from-edge-title": "Sind Sie sicher, dass Sie die Zuordnung zum Gerät '{{deviceName}}' wirklich aufheben möchten?", 719 "unassign-device-from-edge-title": "Sind Sie sicher, dass Sie die Zuordnung zum Gerät '{{deviceName}}' wirklich aufheben möchten?",
723 "unassign-device-from-edge-text": "Nach der Bestätigung ist das Gerät nicht zugeordnet und für den Kunden nicht zugänglich.", 720 "unassign-device-from-edge-text": "Nach der Bestätigung ist das Gerät nicht zugeordnet und für den Kunden nicht zugänglich.",
724 - "unassign-devices-from-edge-action-title": "Zuordnung { count, plural, 1 {1 Gerät} other {# Geräte} } vom Rand aufheben",  
725 - "unassign-device-from-edge": "Nicht zugeordnete Geräte",  
726 "unassign-devices-from-edge-title": "Sind Sie sicher, dass Sie { count, plural, 1 {1 Gerät} other {# Geräte} } nicht mehr zuordnen möchten?", 721 "unassign-devices-from-edge-title": "Sind Sie sicher, dass Sie { count, plural, 1 {1 Gerät} other {# Geräte} } nicht mehr zuordnen möchten?",
727 "unassign-devices-from-edge-text": "Nach der Bestätigung werden alle ausgewählten Geräte nicht zugewiesen und sind für den Rand nicht zugänglich." 722 "unassign-devices-from-edge-text": "Nach der Bestätigung werden alle ausgewählten Geräte nicht zugewiesen und sind für den Rand nicht zugänglich."
728 }, 723 },
@@ -731,9 +726,10 @@ @@ -731,9 +726,10 @@
731 }, 726 },
732 "edge": { 727 "edge": {
733 "edge": "Rand", 728 "edge": "Rand",
734 - "edges": "Rand", 729 + "edge-instances": "Kanteninstanzen",
735 "management": "Rand verwalten", 730 "management": "Rand verwalten",
736 "no-edges-matching": "Keine passenden Rand '{{entity}}' gefunden.", 731 "no-edges-matching": "Keine passenden Rand '{{entity}}' gefunden.",
  732 + "rulechain-templates": "Regelkettenvorlagen",
737 "add": "Rand hinzufügen", 733 "add": "Rand hinzufügen",
738 "view": "Rand anzeigen", 734 "view": "Rand anzeigen",
739 "no-edges-text": "Kein Rand gefunden.", 735 "no-edges-text": "Kein Rand gefunden.",
@@ -744,7 +740,6 @@ @@ -744,7 +740,6 @@
744 "delete-edge-title": "Möchten Sie des Rands wirklich löschen '{{edgeName}}'?", 740 "delete-edge-title": "Möchten Sie des Rands wirklich löschen '{{edgeName}}'?",
745 "delete-edge-text": "Seien Sie vorsichtig, nach der Bestätigung werden der Rand und alle zugehörigen Daten nicht wiederhergestellt.", 741 "delete-edge-text": "Seien Sie vorsichtig, nach der Bestätigung werden der Rand und alle zugehörigen Daten nicht wiederhergestellt.",
746 "delete-edges-title": "Sind Sie sicher, dass Sie die Rand löschen möchten { count, plural, 1 {1 Rand} other {# Rand} }?", 742 "delete-edges-title": "Sind Sie sicher, dass Sie die Rand löschen möchten { count, plural, 1 {1 Rand} other {# Rand} }?",
747 - "delete-edges-action-title": "Löschen { count, plural, 1 {1 Rand} other {# Rand} }",  
748 "delete-edges-text": "Vorsicht, nach Bestätigung werden alle ausgewählten Rand entfernt und alle zugehörigen Daten werden nicht wiederhergestellt.", 743 "delete-edges-text": "Vorsicht, nach Bestätigung werden alle ausgewählten Rand entfernt und alle zugehörigen Daten werden nicht wiederhergestellt.",
749 "name": "Name", 744 "name": "Name",
750 "name-required": "Name ist erforderlich.", 745 "name-required": "Name ist erforderlich.",
@@ -1356,8 +1351,6 @@ @@ -1356,8 +1351,6 @@
1356 "rulechain": { 1351 "rulechain": {
1357 "rulechain": "Regelkette", 1352 "rulechain": "Regelkette",
1358 "rulechains": "Regelketten", 1353 "rulechains": "Regelketten",
1359 - "core-rulechains": "Kernregelketten",  
1360 - "edge-rulechains": "Randregelketten",  
1361 "root": "Wurzel", 1354 "root": "Wurzel",
1362 "delete": "Regelkette löschen", 1355 "delete": "Regelkette löschen",
1363 "name": "Name", 1356 "name": "Name",
@@ -1394,11 +1387,9 @@ @@ -1394,11 +1387,9 @@
1394 "assign-rulechains": "Regelketten zuweisen", 1387 "assign-rulechains": "Regelketten zuweisen",
1395 "assign-new-rulechain": "Neues Regelkette zuweisen", 1388 "assign-new-rulechain": "Neues Regelkette zuweisen",
1396 "delete-rulechains": "Regelketten löschen", 1389 "delete-rulechains": "Regelketten löschen",
1397 - "default": "Standard",  
1398 "unassign-rulechain": "Nicht zugeordnete Regelkette", 1390 "unassign-rulechain": "Nicht zugeordnete Regelkette",
1399 "unassign-rulechains": "Nicht zugeordnete Regelketten", 1391 "unassign-rulechains": "Nicht zugeordnete Regelketten",
1400 "unassign-rulechain-title": "Möchten Sie die Zuordnung die Regelkette '{{ruleChainTitle}}' wirklich aufheben?", 1392 "unassign-rulechain-title": "Möchten Sie die Zuordnung die Regelkette '{{ruleChainTitle}}' wirklich aufheben?",
1401 - "unassign-rulechains-title": "Sind Sie sicher, dass Sie die Zuordnung aufheben möchten { count, plural, 1 {1 Regelkette} other {# Regelketten} }?",  
1402 "unassign-rulechain-from-edge-text": "Nach der Bestätigung wird die Zuordnung aller ausgewählten Regelkette aufgehoben und sie sind für den Rand nicht mehr zugänglich.", 1393 "unassign-rulechain-from-edge-text": "Nach der Bestätigung wird die Zuordnung aller ausgewählten Regelkette aufgehoben und sie sind für den Rand nicht mehr zugänglich.",
1403 "unassign-rulechains-from-edge-action-title": "Zuordnung { count, plural, 1 {1 Regelkette} other {# Regelketten} } vom Rand aufheben", 1394 "unassign-rulechains-from-edge-action-title": "Zuordnung { count, plural, 1 {1 Regelkette} other {# Regelketten} } vom Rand aufheben",
1404 "unassign-rulechains-from-edge-text": "Nach der Bestätigung wird die Zuordnung aller ausgewählten Regelketten aufgehoben und sie sind für den Rand nicht mehr zugänglich.", 1395 "unassign-rulechains-from-edge-text": "Nach der Bestätigung wird die Zuordnung aller ausgewählten Regelketten aufgehoben und sie sind für den Rand nicht mehr zugänglich.",
@@ -1408,9 +1399,9 @@ @@ -1408,9 +1399,9 @@
1408 "set-default-root-edge-rulechain-title": "Sind Sie sicher, dass Sie die Randregelkette '{{ruleChainName}}' zur Wurzel machen Standard?", 1399 "set-default-root-edge-rulechain-title": "Sind Sie sicher, dass Sie die Randregelkette '{{ruleChainName}}' zur Wurzel machen Standard?",
1409 "set-default-root-edge-rulechain-text": "Nach der Bestätigung wird die Randregelkette zur Wurzel Standard und behandelt alle eingehenden Transportnachrichten.", 1400 "set-default-root-edge-rulechain-text": "Nach der Bestätigung wird die Randregelkette zur Wurzel Standard und behandelt alle eingehenden Transportnachrichten.",
1410 "invalid-rulechain-type-error": "Regelkette konnte nicht importiert werden: Ungültige Regelkettentyp. Erwarteter Typ ist {{expectedRuleChainType}}.", 1401 "invalid-rulechain-type-error": "Regelkette konnte nicht importiert werden: Ungültige Regelkettentyp. Erwarteter Typ ist {{expectedRuleChainType}}.",
1411 - "set-default-edge": "Machen Sie Regelkette Standard",  
1412 - "set-default-edge-title": "Sind Sie sicher, dass Sie die Randregelkette '{{ruleChainName}}' machen Standard?",  
1413 - "set-default-edge-text": "Nach der Bestätigung wird die Randregelkette für neu erstellte Rand vergeben.", 1402 + "set-auto-assign-to-edge": "Ordnen Sie die Regelkette bei der Erstellung automatisch den Kanten zu",
  1403 + "set-auto-assign-to-edge-title": "Möchten Sie die Kantenregelkette '{{ruleChainName}}' bei der Erstellung automatisch den Kanten zuweisen?",
  1404 + "set-auto-assign-to-edge-text": "Nach der Bestätigung wird die Kantenregelkette bei der Erstellung automatisch den Kanten zugewiesen.",
1414 "remove-default-edge": "Randregelkette Standard entfernen", 1405 "remove-default-edge": "Randregelkette Standard entfernen",
1415 "remove-default-edge-title": "Sind Sie sicher, dass Sie die Randregelkette '{{ruleChainName}}' aus der Standardliste entfernen?", 1406 "remove-default-edge-title": "Sind Sie sicher, dass Sie die Randregelkette '{{ruleChainName}}' aus der Standardliste entfernen?",
1416 "remove-default-edge-text": "Nach der Bestätigung wird die Randregelkette nicht für neu erstellte Rand vergeben." 1407 "remove-default-edge-text": "Nach der Bestätigung wird die Randregelkette nicht für neu erstellte Rand vergeben."
@@ -412,7 +412,6 @@ @@ -412,7 +412,6 @@
412 "unassign-asset-from-edge": "Unassign asset", 412 "unassign-asset-from-edge": "Unassign asset",
413 "unassign-asset-from-edge-title": "Are you sure you want to unassign the asset '{{assetName}}'?", 413 "unassign-asset-from-edge-title": "Are you sure you want to unassign the asset '{{assetName}}'?",
414 "unassign-asset-from-edge-text": "After the confirmation the asset will be unassigned and won't be accessible by the edge.", 414 "unassign-asset-from-edge-text": "After the confirmation the asset will be unassigned and won't be accessible by the edge.",
415 - "unassign-assets-from-edge-action-title": "Unassign { count, plural, 1 {1 asset} other {# assets} } from edge",  
416 "unassign-assets-from-edge-title": "Are you sure you want to unassign { count, plural, 1 {1 asset} other {# assets} }?", 415 "unassign-assets-from-edge-title": "Are you sure you want to unassign { count, plural, 1 {1 asset} other {# assets} }?",
417 "unassign-assets-from-edge-text": "After the confirmation all selected assets will be unassigned and won't be accessible by the edge." 416 "unassign-assets-from-edge-text": "After the confirmation all selected assets will be unassigned and won't be accessible by the edge."
418 }, 417 },
@@ -611,7 +610,6 @@ @@ -611,7 +610,6 @@
611 "delete-customers-text": "Be careful, after the confirmation all selected customers will be removed and all related data will become unrecoverable.", 610 "delete-customers-text": "Be careful, after the confirmation all selected customers will be removed and all related data will become unrecoverable.",
612 "manage-users": "Manage users", 611 "manage-users": "Manage users",
613 "manage-assets": "Manage assets", 612 "manage-assets": "Manage assets",
614 - "manage-edges": "Manage edges",  
615 "manage-devices": "Manage devices", 613 "manage-devices": "Manage devices",
616 "manage-dashboards": "Manage dashboards", 614 "manage-dashboards": "Manage dashboards",
617 "title": "Title", 615 "title": "Title",
@@ -783,7 +781,6 @@ @@ -783,7 +781,6 @@
783 "select-state": "Select target state", 781 "select-state": "Select target state",
784 "state-controller": "State controller", 782 "state-controller": "State controller",
785 "unassign-dashboard-from-edge-text": "After the confirmation the dashboard will be unassigned and won't be accessible by the edge.", 783 "unassign-dashboard-from-edge-text": "After the confirmation the dashboard will be unassigned and won't be accessible by the edge.",
786 - "unassign-dashboards-from-edge-action-title": "Unassign { count, plural, 1 {1 dashboard} other {# dashboards} } from edge",  
787 "unassign-dashboards-from-edge-text": "After the confirmation all selected dashboards will be unassigned and won't be accessible by the edge.", 784 "unassign-dashboards-from-edge-text": "After the confirmation all selected dashboards will be unassigned and won't be accessible by the edge.",
788 "assign-dashboard-to-edge": "Assign Dashboard(s) To Edge", 785 "assign-dashboard-to-edge": "Assign Dashboard(s) To Edge",
789 "assign-dashboard-to-edge-text": "Please select the dashboards to assign to the edge" 786 "assign-dashboard-to-edge-text": "Please select the dashboards to assign to the edge"
@@ -877,6 +874,7 @@ @@ -877,6 +874,7 @@
877 "unassign-devices-action-title": "Unassign { count, plural, 1 {1 device} other {# devices} } from customer", 874 "unassign-devices-action-title": "Unassign { count, plural, 1 {1 device} other {# devices} } from customer",
878 "unassign-device-from-edge-title": "Are you sure you want to unassign the device '{{deviceName}}'?", 875 "unassign-device-from-edge-title": "Are you sure you want to unassign the device '{{deviceName}}'?",
879 "unassign-device-from-edge-text": "After the confirmation the device will be unassigned and won't be accessible by the edge.", 876 "unassign-device-from-edge-text": "After the confirmation the device will be unassigned and won't be accessible by the edge.",
  877 + "unassign-devices-from-edge": "Unassign devices from edge",
880 "assign-new-device": "Assign new device", 878 "assign-new-device": "Assign new device",
881 "make-public-device-title": "Are you sure you want to make the device '{{deviceName}}' public?", 879 "make-public-device-title": "Are you sure you want to make the device '{{deviceName}}' public?",
882 "make-public-device-text": "After the confirmation the device and all its data will be made public and accessible by others.", 880 "make-public-device-text": "After the confirmation the device and all its data will be made public and accessible by others.",
@@ -950,12 +948,8 @@ @@ -950,12 +948,8 @@
950 "customer-to-assign-device": "Customer to assign the device", 948 "customer-to-assign-device": "Customer to assign the device",
951 "add-credential": "Add credential" 949 "add-credential": "Add credential"
952 }, 950 },
953 - "assign-device-to-edge": "Assign Device(s) To Edge",  
954 - "unassign-devices-from-edge-action-title": "Unassign { count, plural, 1 {1 device} other {# devices} } from edge",  
955 - "unassign-device-from-edge": "Unassign device",  
956 "unassign-devices-from-edge-title": "Are you sure you want to unassign { count, plural, 1 {1 device} other {# devices} }?", 951 "unassign-devices-from-edge-title": "Are you sure you want to unassign { count, plural, 1 {1 device} other {# devices} }?",
957 "unassign-devices-from-edge-text": "After the confirmation all selected devices will be unassigned and won't be accessible by the edge." 952 "unassign-devices-from-edge-text": "After the confirmation all selected devices will be unassigned and won't be accessible by the edge."
958 -  
959 }, 953 },
960 "device-profile": { 954 "device-profile": {
961 "device-profile": "Device profile", 955 "device-profile": "Device profile",
@@ -1116,10 +1110,11 @@ @@ -1116,10 +1110,11 @@
1116 }, 1110 },
1117 "edge": { 1111 "edge": {
1118 "edge": "Edge", 1112 "edge": "Edge",
1119 - "edges": "Edges", 1113 + "edge-instances": "Edge instances",
1120 "edge-file": "Edge file", 1114 "edge-file": "Edge file",
1121 "management": "Edge management", 1115 "management": "Edge management",
1122 "no-edges-matching": "No edges matching '{{entity}}' were found.", 1116 "no-edges-matching": "No edges matching '{{entity}}' were found.",
  1117 + "rulechain-templates": "Rule chain templates",
1123 "add": "Add Edge", 1118 "add": "Add Edge",
1124 "view": "View Edge", 1119 "view": "View Edge",
1125 "no-edges-text": "No edges found", 1120 "no-edges-text": "No edges found",
@@ -1130,7 +1125,6 @@ @@ -1130,7 +1125,6 @@
1130 "delete-edge-title": "Are you sure you want to delete the edge '{{edgeName}}'?", 1125 "delete-edge-title": "Are you sure you want to delete the edge '{{edgeName}}'?",
1131 "delete-edge-text": "Be careful, after the confirmation the edge and all related data will become unrecoverable.", 1126 "delete-edge-text": "Be careful, after the confirmation the edge and all related data will become unrecoverable.",
1132 "delete-edges-title": "Are you sure you want to edge { count, plural, 1 {1 edge} other {# edges} }?", 1127 "delete-edges-title": "Are you sure you want to edge { count, plural, 1 {1 edge} other {# edges} }?",
1133 - "delete-edges-action-title": "Delete { count, plural, 1 {1 edge} other {# edges} }",  
1134 "delete-edges-text": "Be careful, after the confirmation all selected edges will be removed and all related data will become unrecoverable.", 1128 "delete-edges-text": "Be careful, after the confirmation all selected edges will be removed and all related data will become unrecoverable.",
1135 "name": "Name", 1129 "name": "Name",
1136 "name-starts-with": "Edge name starts with", 1130 "name-starts-with": "Edge name starts with",
@@ -1176,21 +1170,19 @@ @@ -1176,21 +1170,19 @@
1176 "label": "Label", 1170 "label": "Label",
1177 "load-entity-error": "Failed to load data. Entity not found or has been deleted.", 1171 "load-entity-error": "Failed to load data. Entity not found or has been deleted.",
1178 "assign-new-edge": "Assign new edge", 1172 "assign-new-edge": "Assign new edge",
1179 - "manage-edge-dashboards": "Manage edge dashboards", 1173 + "manage-edge-dashboards": "Edge dashboards",
1180 "unassign-from-edge": "Unassign from edge", 1174 "unassign-from-edge": "Unassign from edge",
1181 "dashboards": "Edge Dashboards", 1175 "dashboards": "Edge Dashboards",
1182 - "manage-edge-rulechains": "Manage edge rule chains",  
1183 - "rulechains": "Edge Rule Chains",  
1184 - "rulechain": "Edge Rule Chain", 1176 + "manage-edge-rulechains": "Edge rule chains",
1185 "edge-key": "Edge key", 1177 "edge-key": "Edge key",
1186 "copy-edge-key": "Copy edge key", 1178 "copy-edge-key": "Copy edge key",
1187 "edge-key-copied-message": "Edge key has been copied to clipboard", 1179 "edge-key-copied-message": "Edge key has been copied to clipboard",
1188 "edge-secret": "Edge secret", 1180 "edge-secret": "Edge secret",
1189 "copy-edge-secret": "Copy edge secret", 1181 "copy-edge-secret": "Copy edge secret",
1190 "edge-secret-copied-message": "Edge secret has been copied to clipboard", 1182 "edge-secret-copied-message": "Edge secret has been copied to clipboard",
1191 - "manage-edge-assets": "Manage edge assets",  
1192 - "manage-edge-devices": "Manage edge devices",  
1193 - "manage-edge-entity-views": "Manage edge entity views", 1183 + "manage-edge-assets": "Edge assets",
  1184 + "manage-edge-devices": "Edge devices",
  1185 + "manage-edge-entity-views": "Edge entity views",
1194 "assets": "Edge assets", 1186 "assets": "Edge assets",
1195 "devices": "Edge devices", 1187 "devices": "Edge devices",
1196 "entity-views": "Edge entity views", 1188 "entity-views": "Edge entity views",
@@ -1207,7 +1199,6 @@ @@ -1207,7 +1199,6 @@
1207 "edge-type-list-empty": "No edge types selected.", 1199 "edge-type-list-empty": "No edge types selected.",
1208 "edge-types": "Edge types", 1200 "edge-types": "Edge types",
1209 "dashboard": "Edge dashboard", 1201 "dashboard": "Edge dashboard",
1210 - "unassign-edges-action-title": "Unassign { count, plural, 1 {1 edge} other {# edges} } from customer",  
1211 "enter-edge-type": "Enter edge type", 1202 "enter-edge-type": "Enter edge type",
1212 "deployed": "Deployed", 1203 "deployed": "Deployed",
1213 "pending": "Pending" 1204 "pending": "Pending"
@@ -2006,7 +1997,6 @@ @@ -2006,7 +1997,6 @@
2006 "rulechain": { 1997 "rulechain": {
2007 "rulechain": "Rule chain", 1998 "rulechain": "Rule chain",
2008 "rulechains": "Rule chains", 1999 "rulechains": "Rule chains",
2009 - "default-root": "Default root",  
2010 "root": "Root", 2000 "root": "Root",
2011 "delete": "Delete rule chain", 2001 "delete": "Delete rule chain",
2012 "name": "Name", 2002 "name": "Name",
@@ -2044,9 +2034,7 @@ @@ -2044,9 +2034,7 @@
2044 "selected-rulechains": "{ count, plural, 1 {1 rule chain} other {# rule chains} } selected", 2034 "selected-rulechains": "{ count, plural, 1 {1 rule chain} other {# rule chains} } selected",
2045 "open-rulechain": "Open rule chain", 2035 "open-rulechain": "Open rule chain",
2046 "assign-new-rulechain": "Assign new rulechain", 2036 "assign-new-rulechain": "Assign new rulechain",
2047 - "edge-rulechains": "Edge Rule chains",  
2048 "edge-rulechain": "Edge Rule chain", 2037 "edge-rulechain": "Edge Rule chain",
2049 - "core-rulechains": "Core Rule chains",  
2050 "unassign-rulechain-from-edge-text": "After the confirmation the rulechain will be unassigned and won't be accessible by the edge.", 2038 "unassign-rulechain-from-edge-text": "After the confirmation the rulechain will be unassigned and won't be accessible by the edge.",
2051 "unassign-rulechains-from-edge-title": "Unassign { count, plural, 1 {1 rulechain} other {# rulechains} } from edge", 2039 "unassign-rulechains-from-edge-title": "Unassign { count, plural, 1 {1 rulechain} other {# rulechains} } from edge",
2052 "unassign-rulechains-from-edge-text": "After the confirmation all selected rulechains will be unassigned and won't be accessible by the edge.", 2040 "unassign-rulechains-from-edge-text": "After the confirmation all selected rulechains will be unassigned and won't be accessible by the edge.",
@@ -2056,17 +2044,14 @@ @@ -2056,17 +2044,14 @@
2056 "set-default-root-edge-rulechain-title": "Are you sure you want to make the rule chain '{{ruleChainName}}' default edge root?", 2044 "set-default-root-edge-rulechain-title": "Are you sure you want to make the rule chain '{{ruleChainName}}' default edge root?",
2057 "set-default-root-edge-rulechain-text": "After the confirmation the rule chain will become default edge root and will handle all incoming transport messages.", 2045 "set-default-root-edge-rulechain-text": "After the confirmation the rule chain will become default edge root and will handle all incoming transport messages.",
2058 "invalid-rulechain-type-error": "Unable to import rule chain: Invalid rule chain type. Expected type is {{expectedRuleChainType}}.", 2046 "invalid-rulechain-type-error": "Unable to import rule chain: Invalid rule chain type. Expected type is {{expectedRuleChainType}}.",
2059 - "set-default-edge": "Make rule chain default",  
2060 - "set-default-edge-title": "Are you sure you want to make the edge rule chain '{{ruleChainName}}' default?",  
2061 - "set-default-edge-text": "After the confirmation the edge rule chain will be added to default list and assigned to newly created edge(s).", 2047 + "set-auto-assign-to-edge": "Auto-assign rule chain to edge(s) on creation",
  2048 + "set-auto-assign-to-edge-title": "Are you sure you want to auto-assign the edge rule chain '{{ruleChainName}}' to edge(s) on creation?",
  2049 + "set-auto-assign-to-edge-text": "After the confirmation the edge rule chain will be automatically assigned to edge(s) on creation.",
2062 "remove-default-edge": "Remove rule chain from defaults", 2050 "remove-default-edge": "Remove rule chain from defaults",
2063 "remove-default-edge-title": "Are you sure you want to remove the edge rule chain '{{ruleChainName}}' from default list?", 2051 "remove-default-edge-title": "Are you sure you want to remove the edge rule chain '{{ruleChainName}}' from default list?",
2064 "remove-default-edge-text": "After the confirmation the edge rule chain will not be assigned for a newly created edges.", 2052 "remove-default-edge-text": "After the confirmation the edge rule chain will not be assigned for a newly created edges.",
2065 "unassign-rulechain-title": "Are you sure you want to unassign the rulechain '{{ruleChainName}}'?", 2053 "unassign-rulechain-title": "Are you sure you want to unassign the rulechain '{{ruleChainName}}'?",
2066 - "unassign-rulechains-title": "Are you sure you want to unassign { count, plural, 1 {1 rulechain} other {# rulechains} }?",  
2067 - "unassign-rulechains": "Unassign rulechains",  
2068 - "default": "Default",  
2069 - "default-root": "Default root" 2054 + "unassign-rulechains": "Unassign rulechains"
2070 }, 2055 },
2071 "rulenode": { 2056 "rulenode": {
2072 "details": "Details", 2057 "details": "Details",
@@ -432,7 +432,6 @@ @@ -432,7 +432,6 @@
432 "manage-assets": "Gestionar activos", 432 "manage-assets": "Gestionar activos",
433 "manage-devices": "Gestionar dispositivos", 433 "manage-devices": "Gestionar dispositivos",
434 "manage-dashboards": "Gestionar paneles", 434 "manage-dashboards": "Gestionar paneles",
435 - "manage-edges": "Administrar bordes",  
436 "title": "Título", 435 "title": "Título",
437 "title-required": "Título requerido.", 436 "title-required": "Título requerido.",
438 "description": "Descripción", 437 "description": "Descripción",
@@ -595,7 +594,6 @@ @@ -595,7 +594,6 @@
595 "select-state": "Seleccionar estado destino (target state)", 594 "select-state": "Seleccionar estado destino (target state)",
596 "state-controller": "Controlador de estados", 595 "state-controller": "Controlador de estados",
597 "unassign-dashboard-from-edge-text": "Después de la confirmación, el tablero no será asignado y el borde no podrá acceder a él", 596 "unassign-dashboard-from-edge-text": "Después de la confirmación, el tablero no será asignado y el borde no podrá acceder a él",
598 - "unassign-dashboards-from-edge-action-title": "Anular asignación { count, plural, 1 {1 panel} other {# paneles} } de borde",  
599 "unassign-dashboards-from-edge-text": "Después de la confirmación, se anulará la asignación de todos los paneles seleccionados y no serán accesibles por de borde", 597 "unassign-dashboards-from-edge-text": "Después de la confirmación, se anulará la asignación de todos los paneles seleccionados y no serán accesibles por de borde",
600 "assign-dashboard-to-edge": "Asignar panel(es) al borde", 598 "assign-dashboard-to-edge": "Asignar panel(es) al borde",
601 "assign-dashboard-to-edge-text": "Por favor selecciona los paneles para asignar al borde" 599 "assign-dashboard-to-edge-text": "Por favor selecciona los paneles para asignar al borde"
@@ -735,12 +733,9 @@ @@ -735,12 +733,9 @@
735 "select-device": "Seleccionar dispositivo", 733 "select-device": "Seleccionar dispositivo",
736 "device-file": "Archivo de dispositivo", 734 "device-file": "Archivo de dispositivo",
737 "import": "Importar dispositivo", 735 "import": "Importar dispositivo",
738 - "assign-device-to-edge": "Asignar dispositivo (s) a borde",  
739 "assign-device-to-edge-text": "Seleccione los dispositivos para asignar al borde", 736 "assign-device-to-edge-text": "Seleccione los dispositivos para asignar al borde",
740 "unassign-device-from-edge-title": "¿Está seguro de que desea desasignar el dispositivo '{{deviceName}}'?", 737 "unassign-device-from-edge-title": "¿Está seguro de que desea desasignar el dispositivo '{{deviceName}}'?",
741 "unassign-device-from-edge-text": "Después de la confirmación, el dispositivo no será asignado y el borde no podrá acceder a él", 738 "unassign-device-from-edge-text": "Después de la confirmación, el dispositivo no será asignado y el borde no podrá acceder a él",
742 - "unassign-devices-from-edge-action-title": "Anular asignación {count, plural, 1 {1 dispositivo} other {# dispositivos}} desde el borde",  
743 - "unassign-device-from-edge": "Desasignar dispositivo",  
744 "unassign-devices-from-edge-title": "¿Está seguro de que desea desasignar {count, plural, 1 {1 dispositivo} other {# dispositivos}}?", 739 "unassign-devices-from-edge-title": "¿Está seguro de que desea desasignar {count, plural, 1 {1 dispositivo} other {# dispositivos}}?",
745 "unassign-devices-from-edge-text": "Después de la confirmación, todos los dispositivos seleccionados quedarán sin asignar y el borde no podrá acceder a ellos." 740 "unassign-devices-from-edge-text": "Después de la confirmación, todos los dispositivos seleccionados quedarán sin asignar y el borde no podrá acceder a ellos."
746 }, 741 },
@@ -753,9 +748,10 @@ @@ -753,9 +748,10 @@
753 }, 748 },
754 "edge": { 749 "edge": {
755 "edge": "Borde", 750 "edge": "Borde",
756 - "edges": "Bordes", 751 + "edge-instances": "Instancias de Borde",
757 "management": "Gestión de bordes", 752 "management": "Gestión de bordes",
758 "no-edges-matching": "No se encontraron bordes que coincidan con '{{entity}}'", 753 "no-edges-matching": "No se encontraron bordes que coincidan con '{{entity}}'",
  754 + "rulechain-templates": "Plantillas, de cadena de reglas",
759 "add": "Agregar borde", 755 "add": "Agregar borde",
760 "view": "Ver borde", 756 "view": "Ver borde",
761 "no-edges-text": "No se encontraron bordes", 757 "no-edges-text": "No se encontraron bordes",
@@ -766,7 +762,6 @@ @@ -766,7 +762,6 @@
766 "delete-edge-title": "¿Está seguro de que desea eliminar el borde '{{edgeName}}'?", 762 "delete-edge-title": "¿Está seguro de que desea eliminar el borde '{{edgeName}}'?",
767 "delete-edge-text": "Tenga cuidado, después de la confirmación, el borde y todos los datos relacionados serán irrecuperables", 763 "delete-edge-text": "Tenga cuidado, después de la confirmación, el borde y todos los datos relacionados serán irrecuperables",
768 "delete-edges-title": "¿Está seguro de que desea edge {count, plural, 1 {1 borde} other {# bordes}}?", 764 "delete-edges-title": "¿Está seguro de que desea edge {count, plural, 1 {1 borde} other {# bordes}}?",
769 - "delete-edges-action-title": "Eliminar {cuenta, plural, 1 {1 borde} other {# bordes}}",  
770 "delete-edges-text": "Tenga cuidado, después de la confirmación se eliminarán todos los bordes seleccionados y todos los datos relacionados se volverán irrecuperables", 765 "delete-edges-text": "Tenga cuidado, después de la confirmación se eliminarán todos los bordes seleccionados y todos los datos relacionados se volverán irrecuperables",
771 "name": "Nombre", 766 "name": "Nombre",
772 "name-required": "Se requiere nombre", 767 "name-required": "Se requiere nombre",
@@ -1527,8 +1522,6 @@ @@ -1527,8 +1522,6 @@
1527 "rulechain": { 1522 "rulechain": {
1528 "rulechain": "Cadena de Regla", 1523 "rulechain": "Cadena de Regla",
1529 "rulechains": "Cadenas de Reglas", 1524 "rulechains": "Cadenas de Reglas",
1530 - "core-rulechains": "Cadenas de reglas centrales",  
1531 - "edge-rulechains": "Cadenas de reglas de borde",  
1532 "root": "Raíz", 1525 "root": "Raíz",
1533 "delete": "Borrar cadena de reglas", 1526 "delete": "Borrar cadena de reglas",
1534 "name": "Nombre", 1527 "name": "Nombre",
@@ -1565,11 +1558,9 @@ @@ -1565,11 +1558,9 @@
1565 "assign-rulechains": "Asignar cadenas de reglas", 1558 "assign-rulechains": "Asignar cadenas de reglas",
1566 "assign-new-rulechain": "Asignar nueva cadena de reglas", 1559 "assign-new-rulechain": "Asignar nueva cadena de reglas",
1567 "delete-rulechains": "Eliminar cadenas de reglas", 1560 "delete-rulechains": "Eliminar cadenas de reglas",
1568 - "default": "Predeterminado",  
1569 "unassign-rulechain": "Anular asignación de cadena de reglas", 1561 "unassign-rulechain": "Anular asignación de cadena de reglas",
1570 "unassign-rulechains": "Anular asignación de cadenas de reglas", 1562 "unassign-rulechains": "Anular asignación de cadenas de reglas",
1571 "unassign-rulechain-title": "¿Está seguro de que desea desasignar la cadena de reglas '{{ruleChainTitle}}'?", 1563 "unassign-rulechain-title": "¿Está seguro de que desea desasignar la cadena de reglas '{{ruleChainTitle}}'?",
1572 - "unassign-rulechains-title": "¿Está seguro de que desea desasignar {count, plural, 1 {1 cadena de reglas} other {# cadenas de reglas}}?",  
1573 "unassign-rulechain-from-edge-text": "Después de la confirmación, la cadena de reglas quedará sin asignar y el borde no podrá acceder a ella", 1564 "unassign-rulechain-from-edge-text": "Después de la confirmación, la cadena de reglas quedará sin asignar y el borde no podrá acceder a ella",
1574 "unassign-rulechains-from-edge-action-title": "Anular asignación {count, plural, 1 {1 cadena de reglas} other {# cadenas de reglas}} des bordes", 1565 "unassign-rulechains-from-edge-action-title": "Anular asignación {count, plural, 1 {1 cadena de reglas} other {# cadenas de reglas}} des bordes",
1575 "unassign-rulechains-from-edge-text": "Después de la confirmación, todas las cadenas de reglas seleccionadas quedarán sin asignar y el borde no podrá acceder a ellas", 1566 "unassign-rulechains-from-edge-text": "Después de la confirmación, todas las cadenas de reglas seleccionadas quedarán sin asignar y el borde no podrá acceder a ellas",
@@ -1579,9 +1570,9 @@ @@ -1579,9 +1570,9 @@
1579 "set-default-root-edge-rulechain-title": "¿Está seguro de que desea hacer que la cadena de reglas '{{ruleChainName}}' sea la raíz de borde predeterminada?", 1570 "set-default-root-edge-rulechain-title": "¿Está seguro de que desea hacer que la cadena de reglas '{{ruleChainName}}' sea la raíz de borde predeterminada?",
1580 "set-default-root-edge-rulechain-text": "Después de la confirmación, la cadena de reglas se convertirá en raíz raíz predeterminada y manejará todos los mensajes de transporte entrantes", 1571 "set-default-root-edge-rulechain-text": "Después de la confirmación, la cadena de reglas se convertirá en raíz raíz predeterminada y manejará todos los mensajes de transporte entrantes",
1581 "invalid-rulechain-type-error": "No se puede importar la cadena de reglas: Tipo de cadena de reglas no válido. El tipo esperado es {{expectedRuleChainType}}", 1572 "invalid-rulechain-type-error": "No se puede importar la cadena de reglas: Tipo de cadena de reglas no válido. El tipo esperado es {{expectedRuleChainType}}",
1582 - "set-default-edge": "Hacer que la cadena de reglas de borde sea predeterminada",  
1583 - "set-default-edge-title": "¿Está seguro de que desea que la cadena de reglas de borde '{{ruleChainName}}' sea predeterminada?",  
1584 - "set-default-edge-text": "Después de la confirmación, la cadena de reglas de borde se agregará a la lista predeterminada y se asignará a los bordes recién creados", 1573 + "set-auto-assign-to-edge": "Asignar automáticamente la cadena de reglas a los bordes en la creación",
  1574 + "set-auto-assign-to-edge-title": "¿Está seguro de que desea asignar automáticamente la cadena de reglas de borde '{{ruleChainName}}' a los bordes en la creación?",
  1575 + "set-auto-assign-to-edge-text": "Después de la confirmación, la cadena de reglas de borde se asignará automáticamente a los bordes en la creación.",
1585 "remove-default-edge": "Eliminar la cadena de regla de borde de los valores predeterminados", 1576 "remove-default-edge": "Eliminar la cadena de regla de borde de los valores predeterminados",
1586 "remove-default-edge-title": "¿Está seguro de que desea eliminar la cadena de reglas de borde '{{ruleChainName}}' de la lista predeterminada?", 1577 "remove-default-edge-title": "¿Está seguro de que desea eliminar la cadena de reglas de borde '{{ruleChainName}}' de la lista predeterminada?",
1587 "remove-default-edge-text": "Después de la confirmación, la cadena de reglas de borde no se asignará a los bordes recién creados" 1578 "remove-default-edge-text": "Después de la confirmación, la cadena de reglas de borde no se asignará a los bordes recién creados"
@@ -433,7 +433,6 @@ @@ -433,7 +433,6 @@
433 "manage-customer-users": "Gérer les utilisateurs du client", 433 "manage-customer-users": "Gérer les utilisateurs du client",
434 "manage-dashboards": "Gérer les tableaux de bord", 434 "manage-dashboards": "Gérer les tableaux de bord",
435 "manage-devices": "Gérer les dispositifs", 435 "manage-devices": "Gérer les dispositifs",
436 - "manage-edges": "Gérer les bordures",  
437 "manage-public-assets": "Gérer les actifs publics", 436 "manage-public-assets": "Gérer les actifs publics",
438 "manage-public-dashboards": "Gérer les tableaux de bord publics", 437 "manage-public-dashboards": "Gérer les tableaux de bord publics",
439 "manage-public-devices": "Gérer les dispositifs publics", 438 "manage-public-devices": "Gérer les dispositifs publics",
@@ -593,7 +592,6 @@ @@ -593,7 +592,6 @@
593 "widget-import-missing-aliases-title": "Configurer les alias utilisés par le widget importé", 592 "widget-import-missing-aliases-title": "Configurer les alias utilisés par le widget importé",
594 "widgets-margins": "Marge entre les widgets", 593 "widgets-margins": "Marge entre les widgets",
595 "unassign-dashboard-from-edge-text": "Après la confirmation, tableau de bord sera non attribué et ne sera pas accessible a la bordure.", 594 "unassign-dashboard-from-edge-text": "Après la confirmation, tableau de bord sera non attribué et ne sera pas accessible a la bordure.",
596 - "unassign-dashboards-from-edge-action-title": "Annuler l'affectation {count, plural, 1 {1 tableau de bord} other {# tableaux de bord}} de la bordure",  
597 "unassign-dashboards-from-edge-text": "Après la confirmation, tous les tableaux de bord sélectionnés ne seront pas attribués et ne seront pas accessibles a la bordure.", 595 "unassign-dashboards-from-edge-text": "Après la confirmation, tous les tableaux de bord sélectionnés ne seront pas attribués et ne seront pas accessibles a la bordure.",
598 "assign-dashboard-to-edge": "Attribuer des tableaux de bord a la bordure", 596 "assign-dashboard-to-edge": "Attribuer des tableaux de bord a la bordure",
599 "assign-dashboard-to-edge-text": "Veuillez sélectionner la bordure pour attribuer le ou les tableaux de bord" 597 "assign-dashboard-to-edge-text": "Veuillez sélectionner la bordure pour attribuer le ou les tableaux de bord"
@@ -735,12 +733,9 @@ @@ -735,12 +733,9 @@
735 "use-device-name-filter": "Utiliser le filtre", 733 "use-device-name-filter": "Utiliser le filtre",
736 "view-credentials": "Afficher les informations d'identification", 734 "view-credentials": "Afficher les informations d'identification",
737 "view-devices": "Afficher les dispositifs", 735 "view-devices": "Afficher les dispositifs",
738 - "assign-device-to-edge": "Attribuer a la bordure",  
739 "assign-device-to-edge-text":"Veuillez sélectionner la bordure pour attribuer le ou les dispositifs", 736 "assign-device-to-edge-text":"Veuillez sélectionner la bordure pour attribuer le ou les dispositifs",
740 "unassign-device-from-edge-title": "Êtes-vous sûr de vouloir annuler l'affection du dispositif {{deviceName}} '?", 737 "unassign-device-from-edge-title": "Êtes-vous sûr de vouloir annuler l'affection du dispositif {{deviceName}} '?",
741 "unassign-device-from-edge-text": "Après la confirmation, dispositif sera non attribué et ne sera pas accessible a la bordure.", 738 "unassign-device-from-edge-text": "Après la confirmation, dispositif sera non attribué et ne sera pas accessible a la bordure.",
742 - "unassign-devices-from-edge-action-title": "Annuler l'affectation de {count, plural, 1 {1 device} other {#devices}} de la bordure",  
743 - "unassign-device-from-edge": "Retirer de la bordure",  
744 "unassign-devices-from-edge-title": "Voulez-vous vraiment annuler l'affectation de {count, plural, 1 {1 device} other {# devices}}?", 739 "unassign-devices-from-edge-title": "Voulez-vous vraiment annuler l'affectation de {count, plural, 1 {1 device} other {# devices}}?",
745 "unassign-devices-from-edge-text": "Après la confirmation, tous les dispositifs sélectionnés ne seront pas attribues et ne seront pas accessibles par la bordure." 740 "unassign-devices-from-edge-text": "Après la confirmation, tous les dispositifs sélectionnés ne seront pas attribues et ne seront pas accessibles par la bordure."
746 }, 741 },
@@ -749,9 +744,10 @@ @@ -749,9 +744,10 @@
749 }, 744 },
750 "edge": { 745 "edge": {
751 "edge": "Bordure", 746 "edge": "Bordure",
752 - "edges": "Bordures", 747 + "edge-instances": "Instances de Bord",
753 "management": "Gestion des bordures", 748 "management": "Gestion des bordures",
754 "no-edges-matching": "Aucun bordure correspondant à {{entity}} n'a été trouvé.", 749 "no-edges-matching": "Aucun bordure correspondant à {{entity}} n'a été trouvé.",
  750 + "rulechain-templates": "Modèles de chaîne de règles",
755 "add": "Ajouter un bordure", 751 "add": "Ajouter un bordure",
756 "view": "Afficher la bordure", 752 "view": "Afficher la bordure",
757 "no-edges-text": "Aucun bordure trouvé", 753 "no-edges-text": "Aucun bordure trouvé",
@@ -762,7 +758,6 @@ @@ -762,7 +758,6 @@
762 "delete-edge-title": "Êtes-vous sûr de vouloir supprimer la bordure '{{edgeName}}'?", 758 "delete-edge-title": "Êtes-vous sûr de vouloir supprimer la bordure '{{edgeName}}'?",
763 "delete-edge-text": "Faites attention, après la confirmation, la bordure et toutes les données associées deviendront irrécupérables", 759 "delete-edge-text": "Faites attention, après la confirmation, la bordure et toutes les données associées deviendront irrécupérables",
764 "delete-edges-title": "Êtes-vous sûr de vouloir supprimer {count, plural, 1 {1 bordure} other {# bordure}}?", 760 "delete-edges-title": "Êtes-vous sûr de vouloir supprimer {count, plural, 1 {1 bordure} other {# bordure}}?",
765 - "delete-edges-action-title": "Supprimer {count, plural, 1 {1 bordure} other {# bordure}}",  
766 "delete-edges-text": "Faites attention, après la confirmation, tous les bordures sélectionnés seront supprimés et toutes les données associées deviendront irrécupérables.", 761 "delete-edges-text": "Faites attention, après la confirmation, tous les bordures sélectionnés seront supprimés et toutes les données associées deviendront irrécupérables.",
767 "name": "Nom", 762 "name": "Nom",
768 "name-required": "Le nom de la bordure est requis", 763 "name-required": "Le nom de la bordure est requis",
@@ -1430,8 +1425,6 @@ @@ -1430,8 +1425,6 @@
1430 "rulechain-required": "Chaîne de règles requise", 1425 "rulechain-required": "Chaîne de règles requise",
1431 "rulechains": "Chaînes de règles", 1426 "rulechains": "Chaînes de règles",
1432 "select-rulechain": "Sélectionner la chaîne de règles", 1427 "select-rulechain": "Sélectionner la chaîne de règles",
1433 - "core-rulechains": "Chaînes de règles fondamentales",  
1434 - "edge-rulechains": "Chaînes de règles de la bordure",  
1435 "set-root": "Rend la chaîne de règles racine (root) ", 1428 "set-root": "Rend la chaîne de règles racine (root) ",
1436 "set-root-rulechain-text": "Après la confirmation, la chaîne de règles deviendra racine (root) et gérera tous les messages de transport entrants.", 1429 "set-root-rulechain-text": "Après la confirmation, la chaîne de règles deviendra racine (root) et gérera tous les messages de transport entrants.",
1437 "set-root-rulechain-title": "Voulez-vous vraiment que la chaîne de règles '{{ruleChainName}} soit racine (root) ?", 1430 "set-root-rulechain-title": "Voulez-vous vraiment que la chaîne de règles '{{ruleChainName}} soit racine (root) ?",
@@ -1439,11 +1432,9 @@ @@ -1439,11 +1432,9 @@
1439 "assign-rulechains": "Attribuer aux chaînes de règles", 1432 "assign-rulechains": "Attribuer aux chaînes de règles",
1440 "assign-new-rulechain": "Attribuer une nouvele chaînes de règles", 1433 "assign-new-rulechain": "Attribuer une nouvele chaînes de règles",
1441 "delete-rulechains": "Supprimer une chaînes de règles", 1434 "delete-rulechains": "Supprimer une chaînes de règles",
1442 - "default": "Défaut",  
1443 "unassign-rulechain": "Retirer chaîne de règles", 1435 "unassign-rulechain": "Retirer chaîne de règles",
1444 "unassign-rulechains": "Retirer chaînes de règles", 1436 "unassign-rulechains": "Retirer chaînes de règles",
1445 "unassign-rulechain-title": "AÊtes-vous sûr de vouloir retirer l'attribution de chaînes de règles '{{ruleChainTitle}}'?", 1437 "unassign-rulechain-title": "AÊtes-vous sûr de vouloir retirer l'attribution de chaînes de règles '{{ruleChainTitle}}'?",
1446 - "unassign-rulechains-title": "Êtes-vous sûr de vouloir retirer l'attribution de {count, plural, 1 {1 chaîne de règles} other {# chaînes de règles}}?",  
1447 "unassign-rulechain-from-edge-text": "Après la confirmation, l'actif sera non attribué et ne sera pas accessible a la bordure.", 1438 "unassign-rulechain-from-edge-text": "Après la confirmation, l'actif sera non attribué et ne sera pas accessible a la bordure.",
1448 "unassign-rulechains-from-edge-action-title": "Retirer {count, plural, 1 {1 chaîne de règles} other {# chaînes de règles}} de la bordure", 1439 "unassign-rulechains-from-edge-action-title": "Retirer {count, plural, 1 {1 chaîne de règles} other {# chaînes de règles}} de la bordure",
1449 "unassign-rulechains-from-edge-text": "Après la confirmation, tous les chaînes de règles sélectionnés ne seront pas attribués et ne seront pas accessibles a la bordure.", 1440 "unassign-rulechains-from-edge-text": "Après la confirmation, tous les chaînes de règles sélectionnés ne seront pas attribués et ne seront pas accessibles a la bordure.",
@@ -1453,9 +1444,9 @@ @@ -1453,9 +1444,9 @@
1453 "set-default-root-edge-rulechain-title": "AVoulez-vous vraiment créer de chaînes de règles par défaut '{{ruleChainName}}'?", 1444 "set-default-root-edge-rulechain-title": "AVoulez-vous vraiment créer de chaînes de règles par défaut '{{ruleChainName}}'?",
1454 "set-default-root-edge-rulechain-text": "Après la confirmation, la chaîne de règles deviendra la racine de la bordure par défaut et gérera tous les messages de transport entrants.", 1445 "set-default-root-edge-rulechain-text": "Après la confirmation, la chaîne de règles deviendra la racine de la bordure par défaut et gérera tous les messages de transport entrants.",
1455 "invalid-rulechain-type-error": "Impossible d'importer la chaîne de règles: type de chaîne de règles non valide. Le type attendu est {{attenduRuleChainType}}.", 1446 "invalid-rulechain-type-error": "Impossible d'importer la chaîne de règles: type de chaîne de règles non valide. Le type attendu est {{attenduRuleChainType}}.",
1456 - "set-default-edge": "Définir la chaîne de règles de la bordure par défaut",  
1457 - "set-default-edge-title": "Voulez-vous vraiment définir la chaîne de règles de la bordure '{{ruleChainName}}' par défaut?",  
1458 - "set-default-edge-text": "Après la confirmation, la chaîne de règles d'arête sera ajoutée à la liste par défaut et affectée aux arêtes nouvellement créées.", 1447 + "set-auto-assign-to-edge": "Assigner automatiquement la chaîne de règles aux arêtes lors de la création",
  1448 + "set-auto-assign-to-edge-title": "Voulez-vous vraiment attribuer automatiquement la chaîne de règles d'arête '{{ruleChainName}}' à l'arête (s) lors de la création?",
  1449 + "set-auto-assign-to-edge-text": "Après la confirmation, la chaîne de règles d'arête sera automatiquement affectée à l'arête (s) lors de la création.",
1459 "remove-default-edge": "Supprimer la chaîne de règles de la bordure des valeurs par défaut", 1450 "remove-default-edge": "Supprimer la chaîne de règles de la bordure des valeurs par défaut",
1460 "remove-default-edge-title": "Voulez-vous vraiment supprimer la chaîne de règles de la bordure '{{ruleChainName}}' de la liste par défaut", 1451 "remove-default-edge-title": "Voulez-vous vraiment supprimer la chaîne de règles de la bordure '{{ruleChainName}}' de la liste par défaut",
1461 "remove-default-edge-text": "Après la confirmation, la chaîne de règles d'arête ne sera pas affectée aux arêtes nouvellement créées." 1452 "remove-default-edge-text": "Après la confirmation, la chaîne de règles d'arête ne sera pas affectée aux arêtes nouvellement créées."