thingsboard-aplcache

Details

diff --git a/application/pom.xml b/application/pom.xml
index a51ad29..0e65c76 100644
--- a/application/pom.xml
+++ b/application/pom.xml
@@ -20,7 +20,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.thingsboard</groupId>
-        <version>2.0.4-SNAPSHOT</version>
+        <version>2.1.0-SNAPSHOT</version>
         <artifactId>thingsboard</artifactId>
     </parent>
     <artifactId>application</artifactId>
diff --git a/common/data/pom.xml b/common/data/pom.xml
index 4fabbb6..1cbd1b5 100644
--- a/common/data/pom.xml
+++ b/common/data/pom.xml
@@ -20,7 +20,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.thingsboard</groupId>
-        <version>2.0.4-SNAPSHOT</version>
+        <version>2.1.0-SNAPSHOT</version>
         <artifactId>common</artifactId>
     </parent>
     <groupId>org.thingsboard.common</groupId>
diff --git a/common/message/pom.xml b/common/message/pom.xml
index 0c3045b..e1af6d1 100644
--- a/common/message/pom.xml
+++ b/common/message/pom.xml
@@ -20,7 +20,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.thingsboard</groupId>
-        <version>2.0.4-SNAPSHOT</version>
+        <version>2.1.0-SNAPSHOT</version>
         <artifactId>common</artifactId>
     </parent>
     <groupId>org.thingsboard.common</groupId>

common/pom.xml 2(+1 -1)

diff --git a/common/pom.xml b/common/pom.xml
index b8020bb..8c2416d 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -20,7 +20,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.thingsboard</groupId>
-        <version>2.0.4-SNAPSHOT</version>
+        <version>2.1.0-SNAPSHOT</version>
         <artifactId>thingsboard</artifactId>
     </parent>
     <groupId>org.thingsboard</groupId>
diff --git a/common/transport/pom.xml b/common/transport/pom.xml
index f759507..07c4d34 100644
--- a/common/transport/pom.xml
+++ b/common/transport/pom.xml
@@ -20,7 +20,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.thingsboard</groupId>
-        <version>2.0.4-SNAPSHOT</version>
+        <version>2.1.0-SNAPSHOT</version>
         <artifactId>common</artifactId>
     </parent>
     <groupId>org.thingsboard.common</groupId>

dao/pom.xml 2(+1 -1)

diff --git a/dao/pom.xml b/dao/pom.xml
index 51469f5..00173bd 100644
--- a/dao/pom.xml
+++ b/dao/pom.xml
@@ -20,7 +20,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.thingsboard</groupId>
-        <version>2.0.4-SNAPSHOT</version>
+        <version>2.1.0-SNAPSHOT</version>
         <artifactId>thingsboard</artifactId>
     </parent>
     <artifactId>dao</artifactId>
diff --git a/docker/cassandra/Makefile b/docker/cassandra/Makefile
index 1ac51fc..d1fb677 100644
--- a/docker/cassandra/Makefile
+++ b/docker/cassandra/Makefile
@@ -1,4 +1,4 @@
-VERSION=2.0.1
+VERSION=2.1.0
 PROJECT=thingsboard
 APP=cassandra
 
diff --git a/docker/cassandra-setup/Makefile b/docker/cassandra-setup/Makefile
index b90a1f1..7990a3e 100644
--- a/docker/cassandra-setup/Makefile
+++ b/docker/cassandra-setup/Makefile
@@ -1,4 +1,4 @@
-VERSION=2.0.1
+VERSION=2.1.0
 PROJECT=thingsboard
 APP=cassandra-setup
 
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index b7a715e..89a8369 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -18,7 +18,7 @@ version: '2'
 
 services:
   tb:
-    image: "thingsboard/application:2.0.1"
+    image: "thingsboard/application:2.1.0"
     ports:
       - "8080:8080"
       - "1883:1883"
diff --git a/docker/k8s/cassandra.yaml b/docker/k8s/cassandra.yaml
index 04cafcb..3165bb1 100644
--- a/docker/k8s/cassandra.yaml
+++ b/docker/k8s/cassandra.yaml
@@ -54,7 +54,7 @@ spec:
               topologyKey: "kubernetes.io/hostname"
       containers:
       - name: cassandra
-        image: thingsboard/cassandra:2.0.1
+        image: thingsboard/cassandra:2.1.0
         imagePullPolicy: Always
         ports:
         - containerPort: 7000
diff --git a/docker/k8s/cassandra-setup.yaml b/docker/k8s/cassandra-setup.yaml
index eefc148..381df77 100644
--- a/docker/k8s/cassandra-setup.yaml
+++ b/docker/k8s/cassandra-setup.yaml
@@ -22,7 +22,7 @@ spec:
   containers:
   - name: cassandra-setup
     imagePullPolicy: Always
-    image: thingsboard/cassandra-setup:2.0.1
+    image: thingsboard/cassandra-setup:2.1.0
     env:
     - name: ADD_DEMO_DATA
       value: "true"
diff --git a/docker/k8s/tb.yaml b/docker/k8s/tb.yaml
index 947afb4..f38e1f1 100644
--- a/docker/k8s/tb.yaml
+++ b/docker/k8s/tb.yaml
@@ -84,7 +84,7 @@ spec:
       containers:
       - name: tb
         imagePullPolicy: Always
-        image: thingsboard/application:2.0.1
+        image: thingsboard/application:2.1.0
         ports:
         - containerPort: 8080
           name: ui
diff --git a/docker/k8s/zookeeper.yaml b/docker/k8s/zookeeper.yaml
index 744c071..ae33ea2 100644
--- a/docker/k8s/zookeeper.yaml
+++ b/docker/k8s/zookeeper.yaml
@@ -87,7 +87,7 @@ spec:
       containers:
       - name: zk
         imagePullPolicy: Always
-        image: thingsboard/zk:2.0.1
+        image: thingsboard/zk:2.1.0
         ports:
         - containerPort: 2181
           name: client
diff --git a/docker/tb/Makefile b/docker/tb/Makefile
index 5e0fcf1..96803ab 100644
--- a/docker/tb/Makefile
+++ b/docker/tb/Makefile
@@ -1,4 +1,4 @@
-VERSION=2.0.1
+VERSION=2.1.0
 PROJECT=thingsboard
 APP=application
 
diff --git a/docker/zookeeper/Makefile b/docker/zookeeper/Makefile
index 1d74b0d..5c58a74 100644
--- a/docker/zookeeper/Makefile
+++ b/docker/zookeeper/Makefile
@@ -1,4 +1,4 @@
-VERSION=2.0.1
+VERSION=2.1.0
 PROJECT=thingsboard
 APP=zk
 
diff --git a/netty-mqtt/pom.xml b/netty-mqtt/pom.xml
index f4607a4..e5904fd 100644
--- a/netty-mqtt/pom.xml
+++ b/netty-mqtt/pom.xml
@@ -19,12 +19,12 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.thingsboard</groupId>
-        <version>2.0.4-SNAPSHOT</version>
+        <version>2.1.0-SNAPSHOT</version>
         <artifactId>thingsboard</artifactId>
     </parent>
     <groupId>org.thingsboard</groupId>
     <artifactId>netty-mqtt</artifactId>
-    <version>2.0.4-SNAPSHOT</version>
+    <version>2.1.0-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <name>Netty MQTT Client</name>

pom.xml 2(+1 -1)

diff --git a/pom.xml b/pom.xml
index f18e7f9..4be0a7f 100755
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.thingsboard</groupId>
     <artifactId>thingsboard</artifactId>
-    <version>2.0.4-SNAPSHOT</version>
+    <version>2.1.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <name>Thingsboard</name>
diff --git a/rule-engine/pom.xml b/rule-engine/pom.xml
index dccf16e..7d769ce 100644
--- a/rule-engine/pom.xml
+++ b/rule-engine/pom.xml
@@ -20,7 +20,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.thingsboard</groupId>
-        <version>2.0.4-SNAPSHOT</version>
+        <version>2.1.0-SNAPSHOT</version>
         <artifactId>thingsboard</artifactId>
     </parent>
     <artifactId>rule-engine</artifactId>
diff --git a/rule-engine/rule-engine-api/pom.xml b/rule-engine/rule-engine-api/pom.xml
index 182c98c..fce5562 100644
--- a/rule-engine/rule-engine-api/pom.xml
+++ b/rule-engine/rule-engine-api/pom.xml
@@ -22,7 +22,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.thingsboard</groupId>
-        <version>2.0.4-SNAPSHOT</version>
+        <version>2.1.0-SNAPSHOT</version>
         <artifactId>rule-engine</artifactId>
     </parent>
     <groupId>org.thingsboard.rule-engine</groupId>
diff --git a/rule-engine/rule-engine-components/pom.xml b/rule-engine/rule-engine-components/pom.xml
index 4071cdc..aed7efd 100644
--- a/rule-engine/rule-engine-components/pom.xml
+++ b/rule-engine/rule-engine-components/pom.xml
@@ -22,7 +22,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.thingsboard</groupId>
-        <version>2.0.4-SNAPSHOT</version>
+        <version>2.1.0-SNAPSHOT</version>
         <artifactId>rule-engine</artifactId>
     </parent>
     <groupId>org.thingsboard.rule-engine</groupId>

tools/pom.xml 2(+1 -1)

diff --git a/tools/pom.xml b/tools/pom.xml
index 8b5bfc5..054eab0 100644
--- a/tools/pom.xml
+++ b/tools/pom.xml
@@ -20,7 +20,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.thingsboard</groupId>
-        <version>2.0.4-SNAPSHOT</version>
+        <version>2.1.0-SNAPSHOT</version>
         <artifactId>thingsboard</artifactId>
     </parent>
     <groupId>org.thingsboard</groupId>
diff --git a/transport/coap/pom.xml b/transport/coap/pom.xml
index 63abab2..61e455a 100644
--- a/transport/coap/pom.xml
+++ b/transport/coap/pom.xml
@@ -20,7 +20,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.thingsboard</groupId>
-        <version>2.0.4-SNAPSHOT</version>
+        <version>2.1.0-SNAPSHOT</version>
         <artifactId>transport</artifactId>
     </parent>
     <groupId>org.thingsboard.transport</groupId>
diff --git a/transport/http/pom.xml b/transport/http/pom.xml
index 54e89d5..3978620 100644
--- a/transport/http/pom.xml
+++ b/transport/http/pom.xml
@@ -20,7 +20,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.thingsboard</groupId>
-        <version>2.0.4-SNAPSHOT</version>
+        <version>2.1.0-SNAPSHOT</version>
         <artifactId>transport</artifactId>
     </parent>
     <groupId>org.thingsboard.transport</groupId>
diff --git a/transport/mqtt/pom.xml b/transport/mqtt/pom.xml
index 5c3795c..0bdb9a8 100644
--- a/transport/mqtt/pom.xml
+++ b/transport/mqtt/pom.xml
@@ -20,7 +20,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.thingsboard</groupId>
-        <version>2.0.4-SNAPSHOT</version>
+        <version>2.1.0-SNAPSHOT</version>
         <artifactId>transport</artifactId>
     </parent>
     <groupId>org.thingsboard.transport</groupId>
diff --git a/transport/pom.xml b/transport/pom.xml
index 0ae885b..03f3d11 100644
--- a/transport/pom.xml
+++ b/transport/pom.xml
@@ -20,7 +20,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.thingsboard</groupId>
-        <version>2.0.4-SNAPSHOT</version>
+        <version>2.1.0-SNAPSHOT</version>
         <artifactId>thingsboard</artifactId>
     </parent>
     <groupId>org.thingsboard</groupId>

ui/package.json 2(+1 -1)

diff --git a/ui/package.json b/ui/package.json
index 4959237..06b7fee 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -1,7 +1,7 @@
 {
   "name": "thingsboard",
   "private": true,
-  "version": "2.0.4",
+  "version": "2.1.0",
   "description": "Thingsboard UI",
   "licenses": [
     {

ui/pom.xml 2(+1 -1)

diff --git a/ui/pom.xml b/ui/pom.xml
index ecb71de..8003eee 100644
--- a/ui/pom.xml
+++ b/ui/pom.xml
@@ -20,7 +20,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.thingsboard</groupId>
-        <version>2.0.4-SNAPSHOT</version>
+        <version>2.1.0-SNAPSHOT</version>
         <artifactId>thingsboard</artifactId>
     </parent>
     <groupId>org.thingsboard</groupId>
diff --git a/ui/src/app/api/time.service.js b/ui/src/app/api/time.service.js
index 8742b58..b8d0c41 100644
--- a/ui/src/app/api/time.service.js
+++ b/ui/src/app/api/time.service.js
@@ -32,84 +32,7 @@ const MAX_LIMIT = 500;
 /*@ngInject*/
 function TimeService($translate, types) {
 
-    var predefIntervals = [
-        {
-            name: $translate.instant('timeinterval.seconds-interval', {seconds: 1}, 'messageformat'),
-            value: 1 * SECOND
-        },
-        {
-            name: $translate.instant('timeinterval.seconds-interval', {seconds: 5}, 'messageformat'),
-            value: 5 * SECOND
-        },
-        {
-            name: $translate.instant('timeinterval.seconds-interval', {seconds: 10}, 'messageformat'),
-            value: 10 * SECOND
-        },
-        {
-            name: $translate.instant('timeinterval.seconds-interval', {seconds: 15}, 'messageformat'),
-            value: 15 * SECOND
-        },
-        {
-            name: $translate.instant('timeinterval.seconds-interval', {seconds: 30}, 'messageformat'),
-            value: 30 * SECOND
-        },
-        {
-            name: $translate.instant('timeinterval.minutes-interval', {minutes: 1}, 'messageformat'),
-            value: 1 * MINUTE
-        },
-        {
-            name: $translate.instant('timeinterval.minutes-interval', {minutes: 2}, 'messageformat'),
-            value: 2 * MINUTE
-        },
-        {
-            name: $translate.instant('timeinterval.minutes-interval', {minutes: 5}, 'messageformat'),
-            value: 5 * MINUTE
-        },
-        {
-            name: $translate.instant('timeinterval.minutes-interval', {minutes: 10}, 'messageformat'),
-            value: 10 * MINUTE
-        },
-        {
-            name: $translate.instant('timeinterval.minutes-interval', {minutes: 15}, 'messageformat'),
-            value: 15 * MINUTE
-        },
-        {
-            name: $translate.instant('timeinterval.minutes-interval', {minutes: 30}, 'messageformat'),
-            value: 30 * MINUTE
-        },
-        {
-            name: $translate.instant('timeinterval.hours-interval', {hours: 1}, 'messageformat'),
-            value: 1 * HOUR
-        },
-        {
-            name: $translate.instant('timeinterval.hours-interval', {hours: 2}, 'messageformat'),
-            value: 2 * HOUR
-        },
-        {
-            name: $translate.instant('timeinterval.hours-interval', {hours: 5}, 'messageformat'),
-            value: 5 * HOUR
-        },
-        {
-            name: $translate.instant('timeinterval.hours-interval', {hours: 10}, 'messageformat'),
-            value: 10 * HOUR
-        },
-        {
-            name: $translate.instant('timeinterval.hours-interval', {hours: 12}, 'messageformat'),
-            value: 12 * HOUR
-        },
-        {
-            name: $translate.instant('timeinterval.days-interval', {days: 1}, 'messageformat'),
-            value: 1 * DAY
-        },
-        {
-            name: $translate.instant('timeinterval.days-interval', {days: 7}, 'messageformat'),
-            value: 7 * DAY
-        },
-        {
-            name: $translate.instant('timeinterval.days-interval', {days: 30}, 'messageformat'),
-            value: 30 * DAY
-        }
-    ];
+    var predefIntervals;
 
     var service = {
         minIntervalLimit: minIntervalLimit,
@@ -166,6 +89,7 @@ function TimeService($translate, types) {
         min = boundMinInterval(min);
         max = boundMaxInterval(max);
         var intervals = [];
+        initPredefIntervals();
         for (var i in predefIntervals) {
             var interval = predefIntervals[i];
             if (interval.value >= min && interval.value <= max) {
@@ -175,6 +99,89 @@ function TimeService($translate, types) {
         return intervals;
     }
 
+    function initPredefIntervals() {
+        if (!predefIntervals) {
+            predefIntervals = [
+                {
+                    name: $translate.instant('timeinterval.seconds-interval', {seconds: 1}, 'messageformat'),
+                    value: 1 * SECOND
+                },
+                {
+                    name: $translate.instant('timeinterval.seconds-interval', {seconds: 5}, 'messageformat'),
+                    value: 5 * SECOND
+                },
+                {
+                    name: $translate.instant('timeinterval.seconds-interval', {seconds: 10}, 'messageformat'),
+                    value: 10 * SECOND
+                },
+                {
+                    name: $translate.instant('timeinterval.seconds-interval', {seconds: 15}, 'messageformat'),
+                    value: 15 * SECOND
+                },
+                {
+                    name: $translate.instant('timeinterval.seconds-interval', {seconds: 30}, 'messageformat'),
+                    value: 30 * SECOND
+                },
+                {
+                    name: $translate.instant('timeinterval.minutes-interval', {minutes: 1}, 'messageformat'),
+                    value: 1 * MINUTE
+                },
+                {
+                    name: $translate.instant('timeinterval.minutes-interval', {minutes: 2}, 'messageformat'),
+                    value: 2 * MINUTE
+                },
+                {
+                    name: $translate.instant('timeinterval.minutes-interval', {minutes: 5}, 'messageformat'),
+                    value: 5 * MINUTE
+                },
+                {
+                    name: $translate.instant('timeinterval.minutes-interval', {minutes: 10}, 'messageformat'),
+                    value: 10 * MINUTE
+                },
+                {
+                    name: $translate.instant('timeinterval.minutes-interval', {minutes: 15}, 'messageformat'),
+                    value: 15 * MINUTE
+                },
+                {
+                    name: $translate.instant('timeinterval.minutes-interval', {minutes: 30}, 'messageformat'),
+                    value: 30 * MINUTE
+                },
+                {
+                    name: $translate.instant('timeinterval.hours-interval', {hours: 1}, 'messageformat'),
+                    value: 1 * HOUR
+                },
+                {
+                    name: $translate.instant('timeinterval.hours-interval', {hours: 2}, 'messageformat'),
+                    value: 2 * HOUR
+                },
+                {
+                    name: $translate.instant('timeinterval.hours-interval', {hours: 5}, 'messageformat'),
+                    value: 5 * HOUR
+                },
+                {
+                    name: $translate.instant('timeinterval.hours-interval', {hours: 10}, 'messageformat'),
+                    value: 10 * HOUR
+                },
+                {
+                    name: $translate.instant('timeinterval.hours-interval', {hours: 12}, 'messageformat'),
+                    value: 12 * HOUR
+                },
+                {
+                    name: $translate.instant('timeinterval.days-interval', {days: 1}, 'messageformat'),
+                    value: 1 * DAY
+                },
+                {
+                    name: $translate.instant('timeinterval.days-interval', {days: 7}, 'messageformat'),
+                    value: 7 * DAY
+                },
+                {
+                    name: $translate.instant('timeinterval.days-interval', {days: 30}, 'messageformat'),
+                    value: 30 * DAY
+                }
+            ];
+        }
+    }
+
     function matchesExistingInterval(min, max, intervalMs) {
         var intervals = getIntervals(min, max);
         for (var i in intervals) {
diff --git a/ui/src/app/dashboard/states/select-target-state.tpl.html b/ui/src/app/dashboard/states/select-target-state.tpl.html
index 5fd3122..a9a4348 100644
--- a/ui/src/app/dashboard/states/select-target-state.tpl.html
+++ b/ui/src/app/dashboard/states/select-target-state.tpl.html
@@ -41,8 +41,8 @@
         </md-dialog-content>
         <md-dialog-actions layout="row">
             <span flex></span>
-            <md-button ng-disabled="$root.loading || !theForm.$dirty || !theForm.$valid" type="submit" class="md-raised md-primary">
-                {{ 'action.save' | translate }}
+            <md-button ng-disabled="$root.loading || !theForm.$valid" type="submit" class="md-raised md-primary">
+                {{ 'action.select' | translate }}
             </md-button>
             <md-button ng-disabled="$root.loading" ng-click="vm.cancel()" style="margin-right:20px;">{{ 'action.cancel' | translate }}</md-button>
         </md-dialog-actions>
diff --git a/ui/src/app/locale/locale.constant-en_US.json b/ui/src/app/locale/locale.constant-en_US.json
index c664259..22aad1a 100644
--- a/ui/src/app/locale/locale.constant-en_US.json
+++ b/ui/src/app/locale/locale.constant-en_US.json
@@ -126,15 +126,15 @@
         "acknowledge": "Acknowledge",
         "clear": "Clear",
         "search": "Search alarms",
-        "selected-alarms": "{ count, select, 1 {1 alarm} other {# alarms} } selected",
+        "selected-alarms": "{ count, plural, 1 {1 alarm} other {# alarms} } selected",
         "no-data": "No data to display",
         "polling-interval": "Alarms polling interval (sec)",
         "polling-interval-required": "Alarms polling interval is required.",
         "min-polling-interval-message": "At least 1 sec polling interval is allowed.",
-        "aknowledge-alarms-title": "Acknowledge { count, select, 1 {1 alarm} other {# alarms} }",
-        "aknowledge-alarms-text": "Are you sure you want to acknowledge { count, select, 1 {1 alarm} other {# alarms} }?",
-        "clear-alarms-title": "Clear { count, select, 1 {1 alarm} other {# alarms} }",
-        "clear-alarms-text": "Are you sure you want to clear { count, select, 1 {1 alarm} other {# alarms} }?"
+        "aknowledge-alarms-title": "Acknowledge { count, plural, 1 {1 alarm} other {# alarms} }",
+        "aknowledge-alarms-text": "Are you sure you want to acknowledge { count, plural, 1 {1 alarm} other {# alarms} }?",
+        "clear-alarms-title": "Clear { count, plural, 1 {1 alarm} other {# alarms} }",
+        "clear-alarms-text": "Are you sure you want to clear { count, plural, 1 {1 alarm} other {# alarms} }?"
     },
     "alias": {
         "add": "Add alias",
@@ -212,15 +212,15 @@
         "add-asset-text": "Add new asset",
         "asset-details": "Asset details",
         "assign-assets": "Assign assets",
-        "assign-assets-text": "Assign { count, select, 1 {1 asset} other {# assets} } to customer",
+        "assign-assets-text": "Assign { count, plural, 1 {1 asset} other {# assets} } to customer",
         "delete-assets": "Delete assets",
         "unassign-assets": "Unassign assets",
-        "unassign-assets-action-title": "Unassign { count, select, 1 {1 asset} other {# assets} } from customer",
+        "unassign-assets-action-title": "Unassign { count, plural, 1 {1 asset} other {# assets} } from customer",
         "assign-new-asset": "Assign new asset",
         "delete-asset-title": "Are you sure you want to delete the asset '{{assetName}}'?",
         "delete-asset-text": "Be careful, after the confirmation the asset and all related data will become unrecoverable.",
-        "delete-assets-title": "Are you sure you want to delete { count, select, 1 {1 asset} other {# assets} }?",
-        "delete-assets-action-title": "Delete { count, select, 1 {1 asset} other {# assets} }",
+        "delete-assets-title": "Are you sure you want to delete { count, plural, 1 {1 asset} other {# assets} }?",
+        "delete-assets-action-title": "Delete { count, plural, 1 {1 asset} other {# assets} }",
         "delete-assets-text": "Be careful, after the confirmation all selected assets will be removed and all related data will become unrecoverable.",
         "make-public-asset-title": "Are you sure you want to make the asset '{{assetName}}' public?",
         "make-public-asset-text": "After the confirmation the asset and all its data will be made public and accessible by others.",
@@ -229,7 +229,7 @@
         "unassign-asset-title": "Are you sure you want to unassign the asset '{{assetName}}'?",
         "unassign-asset-text": "After the confirmation the asset will be unassigned and won't be accessible by the customer.",
         "unassign-asset": "Unassign asset",
-        "unassign-assets-title": "Are you sure you want to unassign { count, select, 1 {1 asset} other {# assets} }?",
+        "unassign-assets-title": "Are you sure you want to unassign { count, plural, 1 {1 asset} other {# assets} }?",
         "unassign-assets-text": "After the confirmation all selected assets will be unassigned and won't be accessible by the customer.",
         "copyId": "Copy asset Id",
         "idCopiedMessage": "Asset Id has been copied to clipboard",
@@ -252,7 +252,7 @@
         "key-required": "Attribute key is required.",
         "value": "Value",
         "value-required": "Attribute value is required.",
-        "delete-attributes-title": "Are you sure you want to delete { count, select, 1 {1 attribute} other {# attributes} }?",
+        "delete-attributes-title": "Are you sure you want to delete { count, plural, 1 {1 attribute} other {# attributes} }?",
         "delete-attributes-text": "Be careful, after the confirmation all selected attributes will be removed.",
         "delete-attributes": "Delete attributes",
         "enter-attribute-value": "Enter attribute value",
@@ -262,8 +262,8 @@
         "prev-widget": "Previous widget",
         "add-to-dashboard": "Add to dashboard",
         "add-widget-to-dashboard": "Add widget to dashboard",
-        "selected-attributes": "{ count, select, 1 {1 attribute} other {# attributes} } selected",
-        "selected-telemetry": "{ count, select, 1 {1 telemetry unit} other {# telemetry units} } selected"
+        "selected-attributes": "{ count, plural, 1 {1 attribute} other {# attributes} } selected",
+        "selected-telemetry": "{ count, plural, 1 {1 telemetry unit} other {# telemetry units} } selected"
     },
     "audit-log": {
         "audit": "Audit",
@@ -356,8 +356,8 @@
         "customer-details": "Customer details",
         "delete-customer-title": "Are you sure you want to delete the customer '{{customerTitle}}'?",
         "delete-customer-text": "Be careful, after the confirmation the customer and all related data will become unrecoverable.",
-        "delete-customers-title": "Are you sure you want to delete { count, select, 1 {1 customer} other {# customers} }?",
-        "delete-customers-action-title": "Delete { count, select, 1 {1 customer} other {# customers} }",
+        "delete-customers-title": "Are you sure you want to delete { count, plural, 1 {1 customer} other {# customers} }?",
+        "delete-customers-action-title": "Delete { count, plural, 1 {1 customer} other {# customers} }",
         "delete-customers-text": "Be careful, after the confirmation all selected customers will be removed and all related data will become unrecoverable.",
         "manage-users": "Manage users",
         "manage-assets": "Manage assets",
@@ -416,20 +416,20 @@
         "add-dashboard-text": "Add new dashboard",
         "assign-dashboards": "Assign dashboards",
         "assign-new-dashboard": "Assign new dashboard",
-        "assign-dashboards-text": "Assign { count, select, 1 {1 dashboard} other {# dashboards} } to customers",
-        "unassign-dashboards-action-text": "Unassign { count, select, 1 {1 dashboard} other {# dashboards} } from customers",
+        "assign-dashboards-text": "Assign { count, plural, 1 {1 dashboard} other {# dashboards} } to customers",
+        "unassign-dashboards-action-text": "Unassign { count, plural, 1 {1 dashboard} other {# dashboards} } from customers",
         "delete-dashboards": "Delete dashboards",
         "unassign-dashboards": "Unassign dashboards",
-        "unassign-dashboards-action-title": "Unassign { count, select, 1 {1 dashboard} other {# dashboards} } from customer",
+        "unassign-dashboards-action-title": "Unassign { count, plural, 1 {1 dashboard} other {# dashboards} } from customer",
         "delete-dashboard-title": "Are you sure you want to delete the dashboard '{{dashboardTitle}}'?",
         "delete-dashboard-text": "Be careful, after the confirmation the dashboard and all related data will become unrecoverable.",
-        "delete-dashboards-title": "Are you sure you want to delete { count, select, 1 {1 dashboard} other {# dashboards} }?",
-        "delete-dashboards-action-title": "Delete { count, select, 1 {1 dashboard} other {# dashboards} }",
+        "delete-dashboards-title": "Are you sure you want to delete { count, plural, 1 {1 dashboard} other {# dashboards} }?",
+        "delete-dashboards-action-title": "Delete { count, plural, 1 {1 dashboard} other {# dashboards} }",
         "delete-dashboards-text": "Be careful, after the confirmation all selected dashboards will be removed and all related data will become unrecoverable.",
         "unassign-dashboard-title": "Are you sure you want to unassign the dashboard '{{dashboardTitle}}'?",
         "unassign-dashboard-text": "After the confirmation the dashboard will be unassigned and won't be accessible by the customer.",
         "unassign-dashboard": "Unassign dashboard",
-        "unassign-dashboards-title": "Are you sure you want to unassign { count, select, 1 {1 dashboard} other {# dashboards} }?",
+        "unassign-dashboards-title": "Are you sure you want to unassign { count, plural, 1 {1 dashboard} other {# dashboards} }?",
         "unassign-dashboards-text": "After the confirmation all selected dashboards will be unassigned and won't be accessible by the customer.",
         "public-dashboard-title": "Dashboard is now public",
         "public-dashboard-text": "Your dashboard <b>{{dashboardTitle}}</b> is now public and accessible via next public <a href='{{publicLink}}' target='_blank'>link</a>:",
@@ -506,7 +506,7 @@
         "manage-states": "Manage dashboard states",
         "states": "Dashboard states",
         "search-states": "Search dashboard states",
-        "selected-states": "{ count, select, 1 {1 dashboard state} other {# dashboard states} } selected",
+        "selected-states": "{ count, plural, 1 {1 dashboard state} other {# dashboard states} } selected",
         "edit-state": "Edit dashboard state",
         "delete-state": "Delete dashboard state",
         "add-state": "Add dashboard state",
@@ -539,11 +539,11 @@
         "alarm": "Alarm fields",
         "timeseries-required": "Entity timeseries are required.",
         "timeseries-or-attributes-required": "Entity timeseries/attributes are required.",
-        "maximum-timeseries-or-attributes": "Maximum { count, select, 1 {1 timeseries/attribute is allowed.} other {# timeseries/attributes are allowed} }",
+        "maximum-timeseries-or-attributes": "Maximum { count, plural, 1 {1 timeseries/attribute is allowed.} other {# timeseries/attributes are allowed} }",
         "alarm-fields-required": "Alarm fields are required.",
         "function-types": "Function types",
         "function-types-required": "Function types are required.",
-        "maximum-function-types": "Maximum { count, select, 1 {1 function type is allowed.} other {# function types are allowed} }"
+        "maximum-function-types": "Maximum { count, plural, 1 {1 function type is allowed.} other {# function types are allowed} }"
     },
     "datasource": {
         "type": "Datasource type",
@@ -595,11 +595,11 @@
         "manage-credentials": "Manage credentials",
         "delete": "Delete device",
         "assign-devices": "Assign devices",
-        "assign-devices-text": "Assign { count, select, 1 {1 device} other {# devices} } to customer",
+        "assign-devices-text": "Assign { count, plural, 1 {1 device} other {# devices} } to customer",
         "delete-devices": "Delete devices",
         "unassign-from-customer": "Unassign from customer",
         "unassign-devices": "Unassign devices",
-        "unassign-devices-action-title": "Unassign { count, select, 1 {1 device} other {# devices} } from customer",
+        "unassign-devices-action-title": "Unassign { count, plural, 1 {1 device} other {# devices} } from customer",
         "assign-new-device": "Assign new device",
         "make-public-device-title": "Are you sure you want to make the device '{{deviceName}}' public?",
         "make-public-device-text": "After the confirmation the device and all its data will be made public and accessible by others.",
@@ -608,13 +608,13 @@
         "view-credentials": "View credentials",
         "delete-device-title": "Are you sure you want to delete the device '{{deviceName}}'?",
         "delete-device-text": "Be careful, after the confirmation the device and all related data will become unrecoverable.",
-        "delete-devices-title": "Are you sure you want to delete { count, select, 1 {1 device} other {# devices} }?",
-        "delete-devices-action-title": "Delete { count, select, 1 {1 device} other {# devices} }",
+        "delete-devices-title": "Are you sure you want to delete { count, plural, 1 {1 device} other {# devices} }?",
+        "delete-devices-action-title": "Delete { count, plural, 1 {1 device} other {# devices} }",
         "delete-devices-text": "Be careful, after the confirmation all selected devices will be removed and all related data will become unrecoverable.",
         "unassign-device-title": "Are you sure you want to unassign the device '{{deviceName}}'?",
         "unassign-device-text": "After the confirmation the device will be unassigned and won't be accessible by the customer.",
         "unassign-device": "Unassign device",
-        "unassign-devices-title": "Are you sure you want to unassign { count, select, 1 {1 device} other {# devices} }?",
+        "unassign-devices-title": "Are you sure you want to unassign { count, plural, 1 {1 device} other {# devices} }?",
         "unassign-devices-text": "After the confirmation all selected devices will be unassigned and won't be accessible by the customer.",
         "device-credentials": "Device Credentials",
         "credentials-type": "Credentials type",
@@ -700,51 +700,51 @@
         "type-required": "Entity type is required.",
         "type-device": "Device",
         "type-devices": "Devices",
-        "list-of-devices": "{ count, select, 1 {One device} other {List of # devices} }",
+        "list-of-devices": "{ count, plural, 1 {One device} other {List of # devices} }",
         "device-name-starts-with": "Devices whose names start with '{{prefix}}'",
         "type-asset": "Asset",
         "type-assets": "Assets",
-        "list-of-assets": "{ count, select, 1 {One asset} other {List of # assets} }",
+        "list-of-assets": "{ count, plural, 1 {One asset} other {List of # assets} }",
         "asset-name-starts-with": "Assets whose names start with '{{prefix}}'",
         "type-rule": "Rule",
         "type-rules": "Rules",
-        "list-of-rules": "{ count, select, 1 {One rule} other {List of # rules} }",
+        "list-of-rules": "{ count, plural, 1 {One rule} other {List of # rules} }",
         "rule-name-starts-with": "Rules whose names start with '{{prefix}}'",
         "type-plugin": "Plugin",
         "type-plugins": "Plugins",
-        "list-of-plugins": "{ count, select, 1 {One plugin} other {List of # plugins} }",
+        "list-of-plugins": "{ count, plural, 1 {One plugin} other {List of # plugins} }",
         "plugin-name-starts-with": "Plugins whose names start with '{{prefix}}'",
         "type-tenant": "Tenant",
         "type-tenants": "Tenants",
-        "list-of-tenants": "{ count, select, 1 {One tenant} other {List of # tenants} }",
+        "list-of-tenants": "{ count, plural, 1 {One tenant} other {List of # tenants} }",
         "tenant-name-starts-with": "Tenants whose names start with '{{prefix}}'",
         "type-customer": "Customer",
         "type-customers": "Customers",
-        "list-of-customers": "{ count, select, 1 {One customer} other {List of # customers} }",
+        "list-of-customers": "{ count, plural, 1 {One customer} other {List of # customers} }",
         "customer-name-starts-with": "Customers whose names start with '{{prefix}}'",
         "type-user": "User",
         "type-users": "Users",
-        "list-of-users": "{ count, select, 1 {One user} other {List of # users} }",
+        "list-of-users": "{ count, plural, 1 {One user} other {List of # users} }",
         "user-name-starts-with": "Users whose names start with '{{prefix}}'",
         "type-dashboard": "Dashboard",
         "type-dashboards": "Dashboards",
-        "list-of-dashboards": "{ count, select, 1 {One dashboard} other {List of # dashboards} }",
+        "list-of-dashboards": "{ count, plural, 1 {One dashboard} other {List of # dashboards} }",
         "dashboard-name-starts-with": "Dashboards whose names start with '{{prefix}}'",
         "type-alarm": "Alarm",
         "type-alarms": "Alarms",
-        "list-of-alarms": "{ count, select, 1 {One alarms} other {List of # alarms} }",
+        "list-of-alarms": "{ count, plural, 1 {One alarms} other {List of # alarms} }",
         "alarm-name-starts-with": "Alarms whose names start with '{{prefix}}'",
         "type-rulechain": "Rule chain",
         "type-rulechains": "Rule chains",
-        "list-of-rulechains": "{ count, select, 1 {One rule chain} other {List of # rule chains} }",
+        "list-of-rulechains": "{ count, plural, 1 {One rule chain} other {List of # rule chains} }",
         "rulechain-name-starts-with": "Rule chains whose names start with '{{prefix}}'",
         "type-rulenode": "Rule node",
         "type-rulenodes": "Rule nodes",
-        "list-of-rulenodes": "{ count, select, 1 {One rule node} other {List of # rule nodes} }",
+        "list-of-rulenodes": "{ count, plural, 1 {One rule node} other {List of # rule nodes} }",
         "rulenode-name-starts-with": "Rule nodes whose names start with '{{prefix}}'",
         "type-current-customer": "Current Customer",
         "search": "Search entities",
-        "selected-entities": "{ count, select, 1 {1 entity} other {# entities} } selected",
+        "selected-entities": "{ count, plural, 1 {1 entity} other {# entities} } selected",
         "entity-name": "Entity name",
         "details": "Entity details",
         "no-entities-prompt": "No entities found",
@@ -781,7 +781,7 @@
     },
     "extension": {
         "extensions": "Extensions",
-        "selected-extensions": "{ count, select, 1 {1 extension} other {# extensions} } selected",
+        "selected-extensions": "{ count, plural, 1 {1 extension} other {# extensions} } selected",
         "type": "Type",
         "key": "Key",
         "value": "Value",
@@ -795,7 +795,7 @@
         "edit": "Edit extension",
         "delete-extension-title": "Are you sure you want to delete the extension '{{extensionId}}'?",
         "delete-extension-text": "Be careful, after the confirmation the extension and all related data will become unrecoverable.",
-        "delete-extensions-title": "Are you sure you want to delete { count, select, 1 {1 extension} other {# extensions} }?",
+        "delete-extensions-title": "Are you sure you want to delete { count, plural, 1 {1 extension} other {# extensions} }?",
         "delete-extensions-text": "Be careful, after the confirmation all selected extensions will be removed.",
         "converters": "Converters",
         "converter-id": "Converter id",
@@ -948,8 +948,8 @@
     "grid": {
         "delete-item-title": "Are you sure you want to delete this item?",
         "delete-item-text": "Be careful, after the confirmation this item and all related data will become unrecoverable.",
-        "delete-items-title": "Are you sure you want to delete { count, select, 1 {1 item} other {# items} }?",
-        "delete-items-action-title": "Delete { count, select, 1 {1 item} other {# items} }",
+        "delete-items-title": "Are you sure you want to delete { count, plural, 1 {1 item} other {# items} }?",
+        "delete-items-action-title": "Delete { count, plural, 1 {1 item} other {# items} }",
         "delete-items-text": "Be careful, after the confirmation all selected items will be removed and all related data will become unrecoverable.",
         "add-item-text": "Add new item",
         "no-items-text": "No items found",
@@ -1050,7 +1050,7 @@
         },
         "from-relations": "Outbound relations",
         "to-relations": "Inbound relations",
-        "selected-relations": "{ count, select, 1 {1 relation} other {# relations} } selected",
+        "selected-relations": "{ count, plural, 1 {1 relation} other {# relations} } selected",
         "type": "Type",
         "to-entity-type": "To entity type",
         "to-entity-name": "To entity name",
@@ -1066,11 +1066,11 @@
         "edit": "Edit relation",
         "delete-to-relation-title": "Are you sure you want to delete relation to the entity '{{entityName}}'?",
         "delete-to-relation-text": "Be careful, after the confirmation the entity '{{entityName}}' will be unrelated from the current entity.",
-        "delete-to-relations-title": "Are you sure you want to delete { count, select, 1 {1 relation} other {# relations} }?",
+        "delete-to-relations-title": "Are you sure you want to delete { count, plural, 1 {1 relation} other {# relations} }?",
         "delete-to-relations-text": "Be careful, after the confirmation all selected relations will be removed and corresponding entities will be unrelated from the current entity.",
         "delete-from-relation-title": "Are you sure you want to delete relation from the entity '{{entityName}}'?",
         "delete-from-relation-text": "Be careful, after the confirmation current entity will be unrelated from the entity '{{entityName}}'.",
-        "delete-from-relations-title": "Are you sure you want to delete { count, select, 1 {1 relation} other {# relations} }?",
+        "delete-from-relations-title": "Are you sure you want to delete { count, plural, 1 {1 relation} other {# relations} }?",
         "delete-from-relations-text": "Be careful, after the confirmation all selected relations will be removed and current entity will be unrelated from the corresponding entities.",
         "remove-relation-filter": "Remove relation filter",
         "add-relation-filter": "Add relation filter",
@@ -1093,8 +1093,8 @@
         "set-root-rulechain-text": "After the confirmation the rule chain will become root and will handle all incoming transport messages.",
         "delete-rulechain-title": "Are you sure you want to delete the rule chain '{{ruleChainName}}'?",
         "delete-rulechain-text": "Be careful, after the confirmation the rule chain and all related data will become unrecoverable.",
-        "delete-rulechains-title": "Are you sure you want to delete { count, select, 1 {1 rule chain} other {# rule chains} }?",
-        "delete-rulechains-action-title": "Delete { count, select, 1 {1 rule chain} other {# rule chains} }",
+        "delete-rulechains-title": "Are you sure you want to delete { count, plural, 1 {1 rule chain} other {# rule chains} }?",
+        "delete-rulechains-action-title": "Delete { count, plural, 1 {1 rule chain} other {# rule chains} }",
         "delete-rulechains-text": "Be careful, after the confirmation all selected rule chains will be removed and all related data will become unrecoverable.",
         "add-rulechain-text": "Add new rule chain",
         "no-rulechains-text": "No rule chains found",
@@ -1192,8 +1192,8 @@
         "tenant-details": "Tenant details",
         "delete-tenant-title": "Are you sure you want to delete the tenant '{{tenantTitle}}'?",
         "delete-tenant-text": "Be careful, after the confirmation the tenant and all related data will become unrecoverable.",
-        "delete-tenants-title": "Are you sure you want to delete { count, select, 1 {1 tenant} other {# tenants} }?",
-        "delete-tenants-action-title": "Delete { count, select, 1 {1 tenant} other {# tenants} }",
+        "delete-tenants-title": "Are you sure you want to delete { count, plural, 1 {1 tenant} other {# tenants} }?",
+        "delete-tenants-action-title": "Delete { count, plural, 1 {1 tenant} other {# tenants} }",
         "delete-tenants-text": "Be careful, after the confirmation all selected tenants will be removed and all related data will become unrecoverable.",
         "title": "Title",
         "title-required": "Title is required.",
@@ -1207,10 +1207,10 @@
         "tenant-required": "Tenant is required"
     },
     "timeinterval": {
-        "seconds-interval": "{ seconds, select, 1 {1 second} other {# seconds} }",
-        "minutes-interval": "{ minutes, select, 1 {1 minute} other {# minutes} }",
-        "hours-interval": "{ hours, select, 1 {1 hour} other {# hours} }",
-        "days-interval": "{ days, select, 1 {1 day} other {# days} }",
+        "seconds-interval": "{ seconds, plural, 1 {1 second} other {# seconds} }",
+        "minutes-interval": "{ minutes, plural, 1 {1 minute} other {# minutes} }",
+        "hours-interval": "{ hours, plural, 1 {1 hour} other {# hours} }",
+        "days-interval": "{ days, plural, 1 {1 day} other {# days} }",
         "days": "Days",
         "hours": "Hours",
         "minutes": "Minutes",
@@ -1218,10 +1218,10 @@
         "advanced": "Advanced"
     },
     "timewindow": {
-        "days": "{ days, select, 1 { day } other {# days } }",
-        "hours": "{ hours, select, 0 { hour } 1 {1 hour } other {# hours } }",
-        "minutes": "{ minutes, select, 0 { minute } 1 {1 minute } other {# minutes } }",
-        "seconds": "{ seconds, select, 0 { second } 1 {1 second } other {# seconds } }",
+        "days": "{ days, plural, 1 { day } other {# days } }",
+        "hours": "{ hours, plural, 0 { hour } 1 {1 hour } other {# hours } }",
+        "minutes": "{ minutes, plural, 0 { minute } 1 {1 minute } other {# minutes } }",
+        "seconds": "{ seconds, plural, 0 { second } 1 {1 second } other {# seconds } }",
         "realtime": "Realtime",
         "history": "History",
         "last-prefix": "last",
@@ -1247,8 +1247,8 @@
         "user-details": "User details",
         "delete-user-title": "Are you sure you want to delete the user '{{userEmail}}'?",
         "delete-user-text": "Be careful, after the confirmation the user and all related data will become unrecoverable.",
-        "delete-users-title": "Are you sure you want to delete { count, select, 1 {1 user} other {# users} }?",
-        "delete-users-action-title": "Delete { count, select, 1 {1 user} other {# users} }",
+        "delete-users-title": "Are you sure you want to delete { count, plural, 1 {1 user} other {# users} }?",
+        "delete-users-action-title": "Delete { count, plural, 1 {1 user} other {# users} }",
         "delete-users-text": "Be careful, after the confirmation all selected users will be removed and all related data will become unrecoverable.",
         "activation-email-sent-message": "Activation email was successfully sent!",
         "resend-activation": "Resend activation",
@@ -1365,8 +1365,8 @@
         "widgets-bundle-details": "Widgets bundle details",
         "delete-widgets-bundle-title": "Are you sure you want to delete the widgets bundle '{{widgetsBundleTitle}}'?",
         "delete-widgets-bundle-text": "Be careful, after the confirmation the widgets bundle and all related data will become unrecoverable.",
-        "delete-widgets-bundles-title": "Are you sure you want to delete { count, select, 1 {1 widgets bundle} other {# widgets bundles} }?",
-        "delete-widgets-bundles-action-title": "Delete { count, select, 1 {1 widgets bundle} other {# widgets bundles} }",
+        "delete-widgets-bundles-title": "Are you sure you want to delete { count, plural, 1 {1 widgets bundle} other {# widgets bundles} }?",
+        "delete-widgets-bundles-action-title": "Delete { count, plural, 1 {1 widgets bundle} other {# widgets bundles} }",
         "delete-widgets-bundles-text": "Be careful, after the confirmation all selected widgets bundles will be removed and all related data will become unrecoverable.",
         "no-widgets-bundles-matching": "No widgets bundles matching '{{widgetsBundle}}' were found.",
         "widgets-bundle-required": "Widgets bundle is required.",
@@ -1402,7 +1402,7 @@
         "use-dashboard-timewindow": "Use dashboard timewindow",
         "display-legend": "Display legend",
         "datasources": "Datasources",
-        "maximum-datasources": "Maximum { count, select, 1 {1 datasource is allowed.} other {# datasources are allowed} }",
+        "maximum-datasources": "Maximum { count, plural, 1 {1 datasource is allowed.} other {# datasources are allowed} }",
         "datasource-type": "Type",
         "datasource-parameters": "Parameters",
         "remove-datasource": "Remove datasource",
diff --git a/ui/src/app/locale/locale.constant-es_ES.json b/ui/src/app/locale/locale.constant-es_ES.json
index 98a31ed..9e5951f 100644
--- a/ui/src/app/locale/locale.constant-es_ES.json
+++ b/ui/src/app/locale/locale.constant-es_ES.json
@@ -123,15 +123,15 @@
         "acknowledge": "Acknowledge",
         "clear": "Clear",
         "search": "Search alarms",
-        "selected-alarms": "{ count, select, 1 {1 alarm} other {# alarms} } selected",
+        "selected-alarms": "{ count, plural, 1 {1 alarm} other {# alarms} } selected",
         "no-data": "No data to display",
         "polling-interval": "Alarms polling interval (sec)",
         "polling-interval-required": "Alarms polling interval is required.",
         "min-polling-interval-message": "At least 1 sec polling interval is allowed.",
-        "aknowledge-alarms-title": "Acknowledge { count, select, 1 {1 alarm} other {# alarms} }",
-        "aknowledge-alarms-text": "Are you sure you want to acknowledge { count, select, 1 {1 alarm} other {# alarms} }?",
-        "clear-alarms-title": "Clear { count, select, 1 {1 alarm} other {# alarms} }",
-        "clear-alarms-text": "Are you sure you want to clear { count, select, 1 {1 alarm} other {# alarms} }?"
+        "aknowledge-alarms-title": "Acknowledge { count, plural, 1 {1 alarm} other {# alarms} }",
+        "aknowledge-alarms-text": "Are you sure you want to acknowledge { count, plural, 1 {1 alarm} other {# alarms} }?",
+        "clear-alarms-title": "Clear { count, plural, 1 {1 alarm} other {# alarms} }",
+        "clear-alarms-text": "Are you sure you want to clear { count, plural, 1 {1 alarm} other {# alarms} }?"
     },
     "alias": {
         "add": "Add alias",
@@ -209,15 +209,15 @@
         "add-asset-text": "Add new asset",
         "asset-details": "Asset details",
         "assign-assets": "Assign assets",
-        "assign-assets-text": "Assign { count, select, 1 {1 asset} other {# assets} } to customer",
+        "assign-assets-text": "Assign { count, plural, 1 {1 asset} other {# assets} } to customer",
         "delete-assets": "Delete assets",
         "unassign-assets": "Unassign assets",
-        "unassign-assets-action-title": "Unassign { count, select, 1 {1 asset} other {# assets} } from customer",
+        "unassign-assets-action-title": "Unassign { count, plural, 1 {1 asset} other {# assets} } from customer",
         "assign-new-asset": "Assign new asset",
         "delete-asset-title": "Are you sure you want to delete the asset '{{assetName}}'?",
         "delete-asset-text": "Be careful, after the confirmation the asset and all related data will become unrecoverable.",
-        "delete-assets-title": "Are you sure you want to delete { count, select, 1 {1 asset} other {# assets} }?",
-        "delete-assets-action-title": "Delete { count, select, 1 {1 asset} other {# assets} }",
+        "delete-assets-title": "Are you sure you want to delete { count, plural, 1 {1 asset} other {# assets} }?",
+        "delete-assets-action-title": "Delete { count, plural, 1 {1 asset} other {# assets} }",
         "delete-assets-text": "Be careful, after the confirmation all selected assets will be removed and all related data will become unrecoverable.",
         "make-public-asset-title": "Are you sure you want to make the asset '{{assetName}}' public?",
         "make-public-asset-text": "After the confirmation the asset and all its data will be made public and accessible by others.",
@@ -226,7 +226,7 @@
         "unassign-asset-title": "Are you sure you want to unassign the asset '{{assetName}}'?",
         "unassign-asset-text": "After the confirmation the asset will be unassigned and won't be accessible by the customer.",
         "unassign-asset": "Unassign asset",
-        "unassign-assets-title": "Are you sure you want to unassign { count, select, 1 {1 asset} other {# assets} }?",
+        "unassign-assets-title": "Are you sure you want to unassign { count, plural, 1 {1 asset} other {# assets} }?",
         "unassign-assets-text": "After the confirmation all selected assets will be unassigned and won't be accessible by the customer.",
         "copyId": "Copy asset Id",
         "idCopiedMessage": "Asset Id has been copied to clipboard",
@@ -248,7 +248,7 @@
         "key-required": "Clave del atributo requerida.",
         "value": "Valor",
         "value-required": "Valor del atributo requerido.",
-        "delete-attributes-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 atributo} other {# atributos} }?",
+        "delete-attributes-title": "¿Estás seguro que quieres eliminar { count, plural, 1 {1 atributo} other {# atributos} }?",
         "delete-attributes-text": "Ten cuidado, luego de confirmar el atributo será eliminado, y la información relacionada será irrecuperable.",
         "delete-attributes": "Borrar atributo",
         "enter-attribute-value": "Ingresar valor del atributo",
@@ -258,8 +258,8 @@
         "prev-widget": "Widget anterior",
         "add-to-dashboard": "Agregar al Panel",
         "add-widget-to-dashboard": "Agregar widget al Panel",
-        "selected-attributes": "{ count, select, 1 {1 atributo} other {# atributos} } seleccionados",
-        "selected-telemetry": "{ count, select, 1 {1 unidad de telemetría } other {# unidades de telemetría} } seleccionadas."
+        "selected-attributes": "{ count, plural, 1 {1 atributo} other {# atributos} } seleccionados",
+        "selected-telemetry": "{ count, plural, 1 {1 unidad de telemetría } other {# unidades de telemetría} } seleccionadas."
     },
     "audit-log": {
         "audit": "Audit",
@@ -342,8 +342,8 @@
         "customer-details": "Detalles del cliente",
         "delete-customer-title": "¿Estás seguro que quieres eliminar el cliente '{{customerTitle}}'?",
         "delete-customer-text": "Ten cuidado, luego de confirmar el cliente será eliminado y toda la información relacionada será irrecuperable.",
-        "delete-customers-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 cliente} other {# clientes} }?",
-        "delete-customers-action-title": "Borrar { count, select, 1 {1 cliente} other {# clientes} }",
+        "delete-customers-title": "¿Estás seguro que quieres eliminar { count, plural, 1 {1 cliente} other {# clientes} }?",
+        "delete-customers-action-title": "Borrar { count, plural, 1 {1 cliente} other {# clientes} }",
         "delete-customers-text": "Ten cuidado, luego de confirmar todos los clientes seleccionados serán eliminados y su información relacionada será irrecuperable.",
         "manage-users": "Gestionar usuarios",
         "manage-devices": "Gestionar dispositivos",
@@ -385,19 +385,19 @@
         "add-dashboard-text": "Agregar nuevo panel",
         "assign-dashboards": "Asignar paneles",
         "assign-new-dashboard": "Asignar nuevo panel",
-        "assign-dashboards-text": "Asignar { count, select, 1 {1 panel} other {# paneles} } al cliente",
+        "assign-dashboards-text": "Asignar { count, plural, 1 {1 panel} other {# paneles} } al cliente",
         "delete-dashboards": "Eliminar paneles",
         "unassign-dashboards": "Desasignar paneles",
-        "unassign-dashboards-action-title": "Desasignar { count, select, 1 {1 paneles} other {# paneles} } del cliente",
+        "unassign-dashboards-action-title": "Desasignar { count, plural, 1 {1 paneles} other {# paneles} } del cliente",
         "delete-dashboard-title": "¿Estás seguro que quieres eliminar el panel '{{dashboardTitle}}'?",
         "delete-dashboard-text": "Ten cuidado, el panel seleccionado será eliminado y la información relacionada sera irrecuperable.",
-        "delete-dashboards-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 panel} other {# paneles} }?",
-        "delete-dashboards-action-title": "Eliminar { count, select, 1 {1 panel} other {# paneles} }",
+        "delete-dashboards-title": "¿Estás seguro que quieres eliminar { count, plural, 1 {1 panel} other {# paneles} }?",
+        "delete-dashboards-action-title": "Eliminar { count, plural, 1 {1 panel} other {# paneles} }",
         "delete-dashboards-text": "Ten cuidado, los paneles seleccionados serán eliminados y la información relacionada será irrecuperable.",
         "unassign-dashboard-title": "¿Estás seguro que quieres desasignar el panel '{{dashboardTitle}}'?",
         "unassign-dashboard-text": "Luego de confirmar, el panel será desasignado y no podrá ser accesible por el cliente.",
         "unassign-dashboard": "Desasignar panel",
-        "unassign-dashboards-title": "¿Estás seguro que quieres desasignar { count, select, 1 {1 panel} other {# paneles} }?",
+        "unassign-dashboards-title": "¿Estás seguro que quieres desasignar { count, plural, 1 {1 panel} other {# paneles} }?",
         "unassign-dashboards-text": "Luego de confirmar, los paneles seleccionados serán desasignados y no podrán ser accesibles por el cliente.",
         "public-dashboard-title": "El panel ahora es público",
         "public-dashboard-text": "Tu panel <b>{{dashboardTitle}}</b> es ahora público y podrá ser accedido desde: <a href='{{publicLink}}' target='_blank'>aquí</a>:",
@@ -527,11 +527,11 @@
         "manage-credentials": "Gestionar credenciales",
         "delete": "Eliminar dispositivo",
         "assign-devices": "Asignar dispositivo",
-        "assign-devices-text": "Asignar { count, select, 1 {1 dispositivo} other {# dispositivos} } al cliente",
+        "assign-devices-text": "Asignar { count, plural, 1 {1 dispositivo} other {# dispositivos} } al cliente",
         "delete-devices": "Eliminar dispositivo",
         "unassign-from-customer": "Desasignar del cliente",
         "unassign-devices": "Desasignar dispositivos",
-        "unassign-devices-action-title": "Desasignar { count, select, 1 {1 dispositivo} other {# dispositivos} } del cliente",
+        "unassign-devices-action-title": "Desasignar { count, plural, 1 {1 dispositivo} other {# dispositivos} } del cliente",
         "assign-new-device": "Asignar nuevo dispositivo",
         "make-public-device-title": "¿Estás seguro que quieres hacer el dispositivo '{{deviceName}}' público?",
         "make-public-device-text": "Luego de confirmar, el dispositivo y la información relacionada serán públicos y podrá ser accesible por otros.",
@@ -540,13 +540,13 @@
         "view-credentials": "Ver credenciales",
         "delete-device-title": "¿Estás seguro que quieres eliminar el dispositivo '{{deviceName}}'?",
         "delete-device-text": "Ten cuidado, luego de confirmar los dispositivos serán eliminados y la información relacionada será irrecuperable.",
-        "delete-devices-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 dispositivo} other {# dispositivos} }?",
-        "delete-devices-action-title": "Eliminar { count, select, 1 {1 dispositivo} other {# dispositivos} }",
+        "delete-devices-title": "¿Estás seguro que quieres eliminar { count, plural, 1 {1 dispositivo} other {# dispositivos} }?",
+        "delete-devices-action-title": "Eliminar { count, plural, 1 {1 dispositivo} other {# dispositivos} }",
         "delete-devices-text": "Ten cuidado, luego de confirmar los dispositivos seleccionados serán eliminados y la información relacionada será irrecuperable.",
         "unassign-device-title": "¿Estás seguro que quieres desasignar el dispositivo '{{deviceName}}'?",
         "unassign-device-text": "Luego de confirmar el dispositivo será desasignado y no podrá ser accesible por el cliente.",
         "unassign-device": "Desasignar dispositivo",
-        "unassign-devices-title": "¿Estás seguro que quieres desasignar { count, select, 1 {1 dispositivo} other {# dispositivos} }?",
+        "unassign-devices-title": "¿Estás seguro que quieres desasignar { count, plural, 1 {1 dispositivo} other {# dispositivos} }?",
         "unassign-devices-text": "Luego de confirmar los dispositivos seleccionados serán desasignados y no podrán ser accedidos por el cliente.",
         "device-credentials": "Credenciales del dispositivo",
         "credentials-type": "Tipo de credencial",
@@ -623,47 +623,47 @@
         "type-required": "Entity type is required.",
         "type-device": "Device",
         "type-devices": "Devices",
-        "list-of-devices": "{ count, select, 1 {One device} other {List of # devices} }",
+        "list-of-devices": "{ count, plural, 1 {One device} other {List of # devices} }",
         "device-name-starts-with": "Devices whose names start with '{{prefix}}'",
         "type-asset": "Asset",
         "type-assets": "Assets",
-        "list-of-assets": "{ count, select, 1 {One asset} other {List of # assets} }",
+        "list-of-assets": "{ count, plural, 1 {One asset} other {List of # assets} }",
         "asset-name-starts-with": "Assets whose names start with '{{prefix}}'",
         "type-rule": "Rule",
         "type-rules": "Rules",
-        "list-of-rules": "{ count, select, 1 {One rule} other {List of # rules} }",
+        "list-of-rules": "{ count, plural, 1 {One rule} other {List of # rules} }",
         "rule-name-starts-with": "Rules whose names start with '{{prefix}}'",
         "type-plugin": "Plugin",
         "type-plugins": "Plugins",
-        "list-of-plugins": "{ count, select, 1 {One plugin} other {List of # plugins} }",
+        "list-of-plugins": "{ count, plural, 1 {One plugin} other {List of # plugins} }",
         "plugin-name-starts-with": "Plugins whose names start with '{{prefix}}'",
         "type-tenant": "Tenant",
         "type-tenants": "Tenants",
-        "list-of-tenants": "{ count, select, 1 {One tenant} other {List of # tenants} }",
+        "list-of-tenants": "{ count, plural, 1 {One tenant} other {List of # tenants} }",
         "tenant-name-starts-with": "Tenants whose names start with '{{prefix}}'",
         "type-customer": "Customer",
         "type-customers": "Customers",
-        "list-of-customers": "{ count, select, 1 {One customer} other {List of # customers} }",
+        "list-of-customers": "{ count, plural, 1 {One customer} other {List of # customers} }",
         "customer-name-starts-with": "Customers whose names start with '{{prefix}}'",
         "type-user": "User",
         "type-users": "Users",
-        "list-of-users": "{ count, select, 1 {One user} other {List of # users} }",
+        "list-of-users": "{ count, plural, 1 {One user} other {List of # users} }",
         "user-name-starts-with": "Users whose names start with '{{prefix}}'",
         "type-dashboard": "Dashboard",
         "type-dashboards": "Dashboards",
-        "list-of-dashboards": "{ count, select, 1 {One dashboard} other {List of # dashboards} }",
+        "list-of-dashboards": "{ count, plural, 1 {One dashboard} other {List of # dashboards} }",
         "dashboard-name-starts-with": "Dashboards whose names start with '{{prefix}}'",
         "type-alarm": "Alarm",
         "type-alarms": "Alarms",
-        "list-of-alarms": "{ count, select, 1 {One alarms} other {List of # alarms} }",
+        "list-of-alarms": "{ count, plural, 1 {One alarms} other {List of # alarms} }",
         "alarm-name-starts-with": "Alarms whose names start with '{{prefix}}'",
         "type-rulechain": "Rule chain",
         "type-rulechains": "Rule chains",
-        "list-of-rulechains": "{ count, select, 1 {One rule chain} other {List of # rule chains} }",
+        "list-of-rulechains": "{ count, plural, 1 {One rule chain} other {List of # rule chains} }",
         "rulechain-name-starts-with": "Rule chains whose names start with '{{prefix}}'",
         "type-current-customer": "Current Customer",
         "search": "Search entities",
-        "selected-entities": "{ count, select, 1 {1 entity} other {# entities} } selected",
+        "selected-entities": "{ count, plural, 1 {1 entity} other {# entities} } selected",
         "entity-name": "Entity name",
         "details": "Entity details",
         "no-entities-prompt": "No entities found",
@@ -690,7 +690,7 @@
     },
     "extension": {
         "extensions": "Extensions",
-        "selected-extensions": "{ count, select, 1 {1 extension} other {# extensions} } selected",
+        "selected-extensions": "{ count, plural, 1 {1 extension} other {# extensions} } selected",
         "type": "Type",
         "key": "Key",
         "value": "Value",
@@ -704,7 +704,7 @@
         "edit": "Edit extension",
         "delete-extension-title": "Are you sure you want to delete the extension '{{extensionId}}'?",
         "delete-extension-text": "Be careful, after the confirmation the extension and all related data will become unrecoverable.",
-        "delete-extensions-title": "Are you sure you want to delete { count, select, 1 {1 extension} other {# extensions} }?",
+        "delete-extensions-title": "Are you sure you want to delete { count, plural, 1 {1 extension} other {# extensions} }?",
         "delete-extensions-text": "Be careful, after the confirmation all selected extensions will be removed.",
         "converters": "Converters",
         "converter-id": "Converter id",
@@ -857,8 +857,8 @@
     "grid": {
         "delete-item-title": "¿Estás seguro que quieres eliminar este item?",
         "delete-item-text": "Ten cuidado, luego de confirmar el item será eliminado y la información relacionada será irrecuperable.",
-        "delete-items-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 item} other {# items} }?",
-        "delete-items-action-title": "Eliminar { count, select, 1 {1 item} other {# items} }",
+        "delete-items-title": "¿Estás seguro que quieres eliminar { count, plural, 1 {1 item} other {# items} }?",
+        "delete-items-action-title": "Eliminar { count, plural, 1 {1 item} other {# items} }",
         "delete-items-text": "Ten cuidado, luego de confirmar los items seleccionados serán eliminados y la información relacionada será irrecuperable.",
         "add-item-text": "Agregar nuevo item",
         "no-items-text": "Ningún item encontrado",
@@ -958,7 +958,7 @@
         },
         "from-relations": "Outbound relations",
         "to-relations": "Inbound relations",
-        "selected-relations": "{ count, select, 1 {1 relation} other {# relations} } selected",
+        "selected-relations": "{ count, plural, 1 {1 relation} other {# relations} } selected",
         "type": "Type",
         "to-entity-type": "To entity type",
         "to-entity-name": "To entity name",
@@ -974,11 +974,11 @@
         "edit": "Edit relation",
         "delete-to-relation-title": "Are you sure you want to delete relation to the entity '{{entityName}}'?",
         "delete-to-relation-text": "Be careful, after the confirmation the entity '{{entityName}}' will be unrelated from the current entity.",
-        "delete-to-relations-title": "Are you sure you want to delete { count, select, 1 {1 relation} other {# relations} }?",
+        "delete-to-relations-title": "Are you sure you want to delete { count, plural, 1 {1 relation} other {# relations} }?",
         "delete-to-relations-text": "Be careful, after the confirmation all selected relations will be removed and corresponding entities will be unrelated from the current entity.",
         "delete-from-relation-title": "Are you sure you want to delete relation from the entity '{{entityName}}'?",
         "delete-from-relation-text": "Be careful, after the confirmation current entity will be unrelated from the entity '{{entityName}}'.",
-        "delete-from-relations-title": "Are you sure you want to delete { count, select, 1 {1 relation} other {# relations} }?",
+        "delete-from-relations-title": "Are you sure you want to delete { count, plural, 1 {1 relation} other {# relations} }?",
         "delete-from-relations-text": "Be careful, after the confirmation all selected relations will be removed and current entity will be unrelated from the corresponding entities.",
         "remove-relation-filter": "Remove relation filter",
         "add-relation-filter": "Add relation filter",
@@ -1001,8 +1001,8 @@
         "set-root-rulechain-text": "After the confirmation the rule chain will become root and will handle all incoming transport messages.",
         "delete-rulechain-title": "Are you sure you want to delete the rule chain '{{ruleChainName}}'?",
         "delete-rulechain-text": "Be careful, after the confirmation the rule chain and all related data will become unrecoverable.",
-        "delete-rulechains-title": "Are you sure you want to delete { count, select, 1 {1 rule chain} other {# rule chains} }?",
-        "delete-rulechains-action-title": "Delete { count, select, 1 {1 rule chain} other {# rule chains} }",
+        "delete-rulechains-title": "Are you sure you want to delete { count, plural, 1 {1 rule chain} other {# rule chains} }?",
+        "delete-rulechains-action-title": "Delete { count, plural, 1 {1 rule chain} other {# rule chains} }",
         "delete-rulechains-text": "Be careful, after the confirmation all selected rule chains will be removed and all related data will become unrecoverable.",
         "add-rulechain-text": "Add new rule chain",
         "no-rulechains-text": "No rule chains found",
@@ -1091,18 +1091,18 @@
         "tenant-details": "Detalles del Tenant",
         "delete-tenant-title": "¿Estás seguro que quieres eliminar el tenant '{{tenantTitle}}'?",
         "delete-tenant-text": "Ten cuidado, luego de confirmar el tenant será eliminado y la información relacionada será irrecuperable.",
-        "delete-tenants-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 tenant} other {# tenants} }?",
-        "delete-tenants-action-title": "Eliminar { count, select, 1 {1 tenant} other {# tenants} }",
+        "delete-tenants-title": "¿Estás seguro que quieres eliminar { count, plural, 1 {1 tenant} other {# tenants} }?",
+        "delete-tenants-action-title": "Eliminar { count, plural, 1 {1 tenant} other {# tenants} }",
         "delete-tenants-text": "Ten cuidado, luego de confirmar los tenants seleccionados serán eliminados y la información relacionada será irrecuperable.",
         "title": "Título",
         "title-required": "Título requerido.",
         "description": "Descripción"
     },
     "timeinterval": {
-        "seconds-interval": "{ seconds, select, 1 {1 segundo} other {# segundos} }",
-        "minutes-interval": "{ minutes, select, 1 {1 minuto} other {# minutos} }",
-        "hours-interval": "{ hours, select, 1 {1 hora} other {# horas} }",
-        "days-interval": "{ days, select, 1 {1 día} other {# días} }",
+        "seconds-interval": "{ seconds, plural, 1 {1 segundo} other {# segundos} }",
+        "minutes-interval": "{ minutes, plural, 1 {1 minuto} other {# minutos} }",
+        "hours-interval": "{ hours, plural, 1 {1 hora} other {# horas} }",
+        "days-interval": "{ days, plural, 1 {1 día} other {# días} }",
         "days": "Días",
         "hours": "Horas",
         "minutes": "Minutos",
@@ -1110,10 +1110,10 @@
         "advanced": "Avanzado"
     },
     "timewindow": {
-        "days": "{ days, select, 1 { día } other {# días } }",
-        "hours": "{ hours, select, 0 { horas } 1 {1 hora } other {# horas } }",
-        "minutes": "{ minutes, select, 0 { minutos } 1 {1 minuto } other {# minutos } }",
-        "seconds": "{ seconds, select, 0 { segundos } 1 {1 segundo } other {# segundos } }",
+        "days": "{ days, plural, 1 { día } other {# días } }",
+        "hours": "{ hours, plural, 0 { horas } 1 {1 hora } other {# horas } }",
+        "minutes": "{ minutes, plural, 0 { minutos } 1 {1 minuto } other {# minutos } }",
+        "seconds": "{ seconds, plural, 0 { segundos } 1 {1 segundo } other {# segundos } }",
         "realtime": "Tiempo-real",
         "history": "Histórico",
         "last-prefix": "último",
@@ -1138,8 +1138,8 @@
         "user-details": "Detalles del usuario",
         "delete-user-title": "¿Estás seguro que quieres eliminar el usuario '{{userEmail}}'?",
         "delete-user-text": "Ten cuidado, luego de confirmar el usuario seleccionado será eliminado y la información relacionada será irrecuperable.",
-        "delete-users-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 usuario} other {# usuarios} }?",
-        "delete-users-action-title": "Borrar { count, select, 1 {1 usuario} other {# usuarios} }",
+        "delete-users-title": "¿Estás seguro que quieres eliminar { count, plural, 1 {1 usuario} other {# usuarios} }?",
+        "delete-users-action-title": "Borrar { count, plural, 1 {1 usuario} other {# usuarios} }",
         "delete-users-text": "Ten cuidado, luego de confirmar los usuarios seleccionados serán eliminados y la información relacionada será irrecuperable.",
         "activation-email-sent-message": "Mail de activación enviado con éxito!",
         "resend-activation": "Reenviar activación",
@@ -1240,8 +1240,8 @@
         "widgets-bundle-details": "Detalles del paquete de Widgets",
         "delete-widgets-bundle-title": "¿Estás seguro que  desea eliminar el paquete de widgets '{{widgetsBundleTitle}}'?",
         "delete-widgets-bundle-text": "Ten cuidado, luego de confirmar todos los paquetes seleccionados serán eliminados y su información relacionada será irrecuperable.",
-        "delete-widgets-bundles-title": "¿Estás seguro que deseas eliminar { count, select, 1 {1 paquete de widgets} other {# paquetes de widgets} }?",
-        "delete-widgets-bundles-action-title": "Eliminar { count, select, 1 {1 paquete de widgets} other {# paquetes de widgets} }",
+        "delete-widgets-bundles-title": "¿Estás seguro que deseas eliminar { count, plural, 1 {1 paquete de widgets} other {# paquetes de widgets} }?",
+        "delete-widgets-bundles-action-title": "Eliminar { count, plural, 1 {1 paquete de widgets} other {# paquetes de widgets} }",
         "delete-widgets-bundles-text": "Ten cuidado, luego de confirmar todos los paquetes seleccionados serán eliminados y la información relacionada será irrecuperable.",
         "no-widgets-bundles-matching": "Ningún paquete '{{widgetsBundle}}' encontrado.",
         "widgets-bundle-required": "Paquete de widget requerido.",
diff --git a/ui/src/app/locale/locale.constant-it_IT.json b/ui/src/app/locale/locale.constant-it_IT.json
index 2111813..1454d36 100644
--- a/ui/src/app/locale/locale.constant-it_IT.json
+++ b/ui/src/app/locale/locale.constant-it_IT.json
@@ -126,15 +126,15 @@
         "acknowledge": "Conferma",
         "clear": "Cancella",
         "search": "Ricerca allarmi",
-        "selected-alarms": "{ count, select, 1 {1 allarme selezionato} other {# allarmi selezionati} }",
+        "selected-alarms": "{ count, plural, 1 {1 allarme selezionato} other {# allarmi selezionati} }",
         "no-data": "Nessun dato da visualizzare",
         "polling-interval": "Intervallo di polling (sec) Allarmi",
         "polling-interval-required": "Intervallo di polling Allarmi richiesto.",
         "min-polling-interval-message": "L'intervallo di polling deve essere di almeno 1 sec.",
-        "aknowledge-alarms-title": "Conferma { count, select, 1 {1 allarme} other {# allarmi} }",
-        "aknowledge-alarms-text": "Sei sicuro di voler confermare { count, select, 1 {1 allarme} other {# allarmi} }?", 
-        "clear-alarms-title": "Elimina { count, select, 1 {1 allarme} other {# allarmi} }",
-        "clear-alarms-text": "Sei sicuro di voler eliminare { count, select, 1 {1 allarme} other {# allarmi} }?" 
+        "aknowledge-alarms-title": "Conferma { count, plural, 1 {1 allarme} other {# allarmi} }",
+        "aknowledge-alarms-text": "Sei sicuro di voler confermare { count, plural, 1 {1 allarme} other {# allarmi} }?", 
+        "clear-alarms-title": "Elimina { count, plural, 1 {1 allarme} other {# allarmi} }",
+        "clear-alarms-text": "Sei sicuro di voler eliminare { count, plural, 1 {1 allarme} other {# allarmi} }?" 
     },
     "alias": {
         "add": "Aggiungi alias",
@@ -212,15 +212,15 @@
         "add-asset-text": "Aggiungi un nuovo asset",
         "asset-details": "Dettagli Asset",
         "assign-assets": "Assegna asset",
-        "assign-assets-text": "Assegna { count, select, 1 {1 asset} other {# assets} } al cliente",
+        "assign-assets-text": "Assegna { count, plural, 1 {1 asset} other {# assets} } al cliente",
         "delete-assets": "Cancella asset",
         "unassign-assets": "Annulla assegnazione asset",
-        "unassign-assets-action-title": "Unassign { count, select, 1 {1 asset} other {# assets} } from customer",
+        "unassign-assets-action-title": "Unassign { count, plural, 1 {1 asset} other {# assets} } from customer",
         "assign-new-asset": "Assegna un nuovo asset",
         "delete-asset-title": "Sei sicuro di voler cancellare l'asset '{{assetName}}'?",
         "delete-asset-text": "Attenzione, dopo la conferma l'asset e tutti i relativi dati non saranno più recuperabili.",
-        "delete-assets-title": "Sei sicuro di voler eliminare { count, select, 1 {1 asset} other {# asset} }?",
-        "delete-assets-action-title": "Elimina { count, select, 1 {1 asset} other {# asset} }",
+        "delete-assets-title": "Sei sicuro di voler eliminare { count, plural, 1 {1 asset} other {# asset} }?",
+        "delete-assets-action-title": "Elimina { count, plural, 1 {1 asset} other {# asset} }",
         "delete-assets-text": "Attenzione, dopo la modifica tutti gli asset selezionati saranno rimossi e tutti i relativi dati non saranno più recuperabili.",
         "make-public-asset-title": "Sei sicuro di voler rendere pubblico l'asset '{{assetName}}'?",
         "make-public-asset-text": "Dopo la conferma l'asset e tutti i suoi dati saranno resi pubblici e accessibili dagli altri.",
@@ -229,7 +229,7 @@
         "unassign-asset-title": "Sei sicuro di voler annullare l'assegnazione dell'asset '{{assetName}}'?",
         "unassign-asset-text": "Dopo la conferma l'assegnazione dell'asset sarà annullata e l'asset non sarà più accessibile dal cliente.",
         "unassign-asset": "Annulla assegnazione asset",
-        "unassign-assets-title": "Sei sicuro di voler annullare l'assegnazione di { count, select, 1 {1 asset} other {# asset} }?",
+        "unassign-assets-title": "Sei sicuro di voler annullare l'assegnazione di { count, plural, 1 {1 asset} other {# asset} }?",
         "unassign-assets-text": "Dopo la conferma sarà annullata l'assegnazione di tutti gli asset selezionati e questi non saranno più accessibili dal cliente.",
         "copyId": "Copia Id asset",
         "idCopiedMessage": "Id Asset copiato negli Appunti",
@@ -252,7 +252,7 @@
         "key-required": "Attributo chiave richiesto.",
         "value": "Valore",
         "value-required": "Attributo valore richiesto.",
-        "delete-attributes-title": "Sei sicuro di voler eliminare { count, select, 1 {1 attributo} other {# attributi} }?",
+        "delete-attributes-title": "Sei sicuro di voler eliminare { count, plural, 1 {1 attributo} other {# attributi} }?",
         "delete-attributes-text": "Attenzione, dopo la conferma tutti gli attributi selezionati saranno rimossi.",
         "delete-attributes": "Elimina attributi",
         "enter-attribute-value": "Inserisci il valore dell'attributo",
@@ -262,8 +262,8 @@
         "prev-widget": "Widget precedente",
         "add-to-dashboard": "Aggiungi alla dashboard",
         "add-widget-to-dashboard": "Aggiungi widget alla dashboard",
-        "selected-attributes": "{ count, select, 1 {1 attributo selezionato} other {# attributi selezionati} }",
-        "selected-telemetry": "{ count, select, 1 {1 unità di telemetria selezionata} other {# unità di telemetria selezionate} }"
+        "selected-attributes": "{ count, plural, 1 {1 attributo selezionato} other {# attributi selezionati} }",
+        "selected-telemetry": "{ count, plural, 1 {1 unità di telemetria selezionata} other {# unità di telemetria selezionate} }"
     },
     "audit-log": {
         "audit": "Audit",
@@ -351,8 +351,8 @@
         "customer-details": "Dettagli cliente",
         "delete-customer-title": "Sei sicuro di voler eliminare il cliente '{{customerTitle}}'?",
         "delete-customer-text": "Attenzione, dopo la conferma il cliente e tutti i suoi dati non saranno più recuperabili.",
-        "delete-customers-title": "Sei sicuro di voler cancellare { count, select, 1 {1 cliente} other {# clienti} }?",
-        "delete-customers-action-title": "Elimina { count, select, 1 {1 cliente} other {# clienti} }",
+        "delete-customers-title": "Sei sicuro di voler cancellare { count, plural, 1 {1 cliente} other {# clienti} }?",
+        "delete-customers-action-title": "Elimina { count, plural, 1 {1 cliente} other {# clienti} }",
         "delete-customers-text": "Attenzione, dopo la conferma tutti i clienti selezionati saranno rimossi e i loro dati non saranno più recuperabili.",
         "manage-users": "Gestisci utenti",
         "manage-assets": "Gestisci asset",
@@ -411,20 +411,20 @@
         "add-dashboard-text": "Aggiungi nuova dashboard",
         "assign-dashboards": "Assegna dashboard",
         "assign-new-dashboard": "Assegna nuova dashboard",
-        "assign-dashboards-text": "Assegna { count, select, 1 {1 dashboard} other {# dashboard} } ai clienti",
-        "unassign-dashboards-action-text": "Annulla assegnazione { count, select, 1 {1 dashboard} other {# dashboards} } ai clienti",
+        "assign-dashboards-text": "Assegna { count, plural, 1 {1 dashboard} other {# dashboard} } ai clienti",
+        "unassign-dashboards-action-text": "Annulla assegnazione { count, plural, 1 {1 dashboard} other {# dashboards} } ai clienti",
         "delete-dashboards": "Elimina dashboard",
         "unassign-dashboards": "Annulla assegnazione dashboard",
-        "unassign-dashboards-action-title": "Annulla assegnazione { count, select, 1 {1 dashboard} other {# dashboards} } al cliente",
+        "unassign-dashboards-action-title": "Annulla assegnazione { count, plural, 1 {1 dashboard} other {# dashboards} } al cliente",
         "delete-dashboard-title": "Sei sicuro di voler cancellare la dashboard '{{dashboardTitle}}'?",
         "delete-dashboard-text": "Attenzione, dopo la conferma la dashboard e tutti i suoi dati non saranno più recuperabili.",
-        "delete-dashboards-title": "Sei sicuro di voler eliminare { count, select, 1 {1 dashboard} other {# dashboard} }?",
-        "delete-dashboards-action-title": "Cancella { count, select, 1 {1 dashboard} other {# dashboard} }",
+        "delete-dashboards-title": "Sei sicuro di voler eliminare { count, plural, 1 {1 dashboard} other {# dashboard} }?",
+        "delete-dashboards-action-title": "Cancella { count, plural, 1 {1 dashboard} other {# dashboard} }",
         "delete-dashboards-text": "Attenzione, dopo la conferma tutte le dashboard selezionate saranno eliminate e tutti i loro dati non saranno più recuperabili.",
         "unassign-dashboard-title": "Sei sicuro di voler annullare l'assegnazione della dashboard '{{dashboardTitle}}'?",
         "unassign-dashboard-text": "Dopo la conferma sarà annullata l'assegnazione della dashboard e questa non sarà più accessibile dal cliente.",
         "unassign-dashboard": "Annulla assegnazione dashboard",
-        "unassign-dashboards-title": "Sei sicuro di voler annullare l'assegnazione di  { count, select, 1 {1 dashboard} other {# dashboard} }?",
+        "unassign-dashboards-title": "Sei sicuro di voler annullare l'assegnazione di  { count, plural, 1 {1 dashboard} other {# dashboard} }?",
         "unassign-dashboards-text": "Dopo la conferma sarà annullata l'assegnazione di tutte le dashboards selezionate e queste non saranno più accessibili dal cliente.",
         "public-dashboard-title": "La Dashboard è ora pubblica",
         "public-dashboard-text": "La dashboard <b>{{dashboardTitle}}</b> è ora pubblica e accessibile al <a href='{{publicLink}}' target='_blank'>link</a>:",
@@ -501,7 +501,7 @@
         "manage-states": "Manage dashboard states",
         "states": "Dashboard states",
         "search-states": "Search dashboard states",
-        "selected-states": "{ count, select, 1 {1 dashboard state} other {# dashboard states} } selected",
+        "selected-states": "{ count, plural, 1 {1 dashboard state} other {# dashboard states} } selected",
         "edit-state": "Edit dashboard state",
         "delete-state": "Delete dashboard state",
         "add-state": "Add dashboard state",
@@ -534,11 +534,11 @@
         "alarm": "Campi allarme",
         "timeseries-required": "Entity timeseries are required.",
         "timeseries-or-attributes-required": "Entity timeseries/attributes are required.",
-        "maximum-timeseries-or-attributes": "Maximum { count, select, 1 {1 timeseries/attribute is allowed.} other {# timeseries/attributes are allowed} }",
+        "maximum-timeseries-or-attributes": "Maximum { count, plural, 1 {1 timeseries/attribute is allowed.} other {# timeseries/attributes are allowed} }",
         "alarm-fields-required": "Campi allarme obbligatori.",
         "function-types": "Tipi funzione",
         "function-types-required": "Tipi funzione obbligatorio.",
-        "maximum-function-types": "Massimo { count, select, 1 {1 tipo di funzione consentito.} other {# tipi di funzione consentiti} }"
+        "maximum-function-types": "Massimo { count, plural, 1 {1 tipo di funzione consentito.} other {# tipi di funzione consentiti} }"
     },
     "datasource": {
         "type": "Tipo sorgente dati",
@@ -590,11 +590,11 @@
         "manage-credentials": "Gestisci credenziali",
         "delete": "Elimina dispositivo",
         "assign-devices": "Assegna dispositivi",
-        "assign-devices-text": "Assegna { count, select, 1 {1 dispositivo} other {# dispositivi} } al cliente",
+        "assign-devices-text": "Assegna { count, plural, 1 {1 dispositivo} other {# dispositivi} } al cliente",
         "delete-devices": "Elimina dispositivi",
         "unassign-from-customer": "Annulla assegnazione al cliente",
         "unassign-devices": "Annulla assegnazione dispositivi",
-        "unassign-devices-action-title": "Annulla assegnazione { count, select, 1 {1 dispositivo} other {# dispositivi} } al cliente",
+        "unassign-devices-action-title": "Annulla assegnazione { count, plural, 1 {1 dispositivo} other {# dispositivi} } al cliente",
         "assign-new-device": "Assegna nuovo dispositivo",
         "make-public-device-title": "Sei sicuro di voler rendere pubblico il dispositivo '{{deviceName}}'?",
         "make-public-device-text": "Dopo la conferma il dispositivo e tutti i suoi dati saranno resi pubblici e accessibili dagli altri.",
@@ -603,13 +603,13 @@
         "view-credentials": "Visualizza credenziali",
         "delete-device-title": "Sei sicuro di voler eliminare il dispositivo '{{deviceName}}'?",
         "delete-device-text": "Attenzione, dopo la conferma il dispositivo e tutti i suoi dati non saranno più recuperabili.",
-        "delete-devices-title": "Sei sicuro di voler eliminare { count, select, 1 {1 dispositivo} other {# dispositivi} }?",
-        "delete-devices-action-title": "Elimina { count, select, 1 {1 dispositivo} other {# dispositivi} }",
+        "delete-devices-title": "Sei sicuro di voler eliminare { count, plural, 1 {1 dispositivo} other {# dispositivi} }?",
+        "delete-devices-action-title": "Elimina { count, plural, 1 {1 dispositivo} other {# dispositivi} }",
         "delete-devices-text": "Attenzione, dopo la conferma tutti i dispositivi selezionati saranno elimininati e i relativi dati non saranno più recuperabili.",
         "unassign-device-title": "Sei sicuro di voler annullare l'assegnazione del dispositivo '{{deviceName}}'?",
         "unassign-device-text": "Dopo la conferma sarà annullata l'assegnazione del dispositivo e questo non sarà più accessibile dal cliente.",
         "unassign-device": "Annulla assegnazione dispositivo",
-        "unassign-devices-title": "Sei sicuro di voler annullare la'ssegnazione di { count, select, 1 {1 dispositivo} other {# dispositivi} }?",
+        "unassign-devices-title": "Sei sicuro di voler annullare la'ssegnazione di { count, plural, 1 {1 dispositivo} other {# dispositivi} }?",
         "unassign-devices-text": "Dopo la conferma sarà annullata l'assegnazione di tutti i dispositivi selezionati e questi non saranno più accessibili dal cliente.",
         "device-credentials": "Credenziali Dispositivo",
         "credentials-type": "Tipo credenziali",
@@ -695,47 +695,47 @@
         "type-required": "Tipo entità obbligatorio.",
         "type-device": "Dispositivo",
         "type-devices": "Dispositivi",
-        "list-of-devices": "{ count, select, 1 {Un dispositivo} other {Lista di # dispositivi} }",
+        "list-of-devices": "{ count, plural, 1 {Un dispositivo} other {Lista di # dispositivi} }",
         "device-name-starts-with": "Dispositivi i cui nomi iniziano per '{{prefix}}'",
         "type-asset": "Asset",
         "type-assets": "Asset",
-        "list-of-assets": "{ count, select, 1 {Un asset} other {Lista di # asset} }",
+        "list-of-assets": "{ count, plural, 1 {Un asset} other {Lista di # asset} }",
         "asset-name-starts-with": "Asset i cui nomi iniziano per '{{prefix}}'",
         "type-rule": "Regola",
         "type-rules": "Regole",
-        "list-of-rules": "{ count, select, 1 {Una regola} other {Lista di # regole} }",
+        "list-of-rules": "{ count, plural, 1 {Una regola} other {Lista di # regole} }",
         "rule-name-starts-with": "Regole i cui nomi iniziano per '{{prefix}}'",
         "type-plugin": "Plugin",
         "type-plugins": "Plugin",
-        "list-of-plugins": "{ count, select, 1 {Un plugin} other {Lista di # plugin} }",
+        "list-of-plugins": "{ count, plural, 1 {Un plugin} other {Lista di # plugin} }",
         "plugin-name-starts-with": "Plugin i cui nomi iniziano per '{{prefix}}'",
         "type-tenant": "Tenant",
         "type-tenants": "Tenants",
-        "list-of-tenants": "{ count, select, 1 {One tenant} other {List of # tenants} }",
+        "list-of-tenants": "{ count, plural, 1 {One tenant} other {List of # tenants} }",
         "tenant-name-starts-with": "Tenants whose names start with '{{prefix}}'",
         "type-customer": "Cliente",
         "type-customers": "Clienti",
-        "list-of-customers": "{ count, select, 1 {Un cliente} other {Lista di # clienti} }",
+        "list-of-customers": "{ count, plural, 1 {Un cliente} other {Lista di # clienti} }",
         "customer-name-starts-with": "Clienti i cui nomi iniziano per '{{prefix}}'",
         "type-user": "Utente",
         "type-users": "Utenti",
-        "list-of-users": "{ count, select, 1 {Un utente} other {Lista of # utenti} }",
+        "list-of-users": "{ count, plural, 1 {Un utente} other {Lista of # utenti} }",
         "user-name-starts-with": "Utenti i cui nomi iniziano per '{{prefix}}'",
         "type-dashboard": "Dashboard",
         "type-dashboards": "Dashboard",
-        "list-of-dashboards": "{ count, select, 1 {Una dashboard} other {Lista di # dashboard} }",
+        "list-of-dashboards": "{ count, plural, 1 {Una dashboard} other {Lista di # dashboard} }",
         "dashboard-name-starts-with": "Dashboard i cui nomi iniziano per '{{prefix}}'",
         "type-alarm": "Allarme",
         "type-alarms": "Allarmi",
-        "list-of-alarms": "{ count, select, 1 {Un allarme} other {Lista di # allarmi} }",
+        "list-of-alarms": "{ count, plural, 1 {Un allarme} other {Lista di # allarmi} }",
         "alarm-name-starts-with": "Allarmi i cui nomi iniziano per '{{prefix}}'",
         "type-rulechain": "Rule chain",
         "type-rulechains": "Rule chains",
-        "list-of-rulechains": "{ count, select, 1 {One rule chain} other {List of # rule chains} }",
+        "list-of-rulechains": "{ count, plural, 1 {One rule chain} other {List of # rule chains} }",
         "rulechain-name-starts-with": "Rule chains whose names start with '{{prefix}}'",
         "type-current-customer": "Current Customer",
         "search": "Ricerca entità",
-        "selected-entities": "{ count, select, 1 {1 entità selezionata} other {# entità selezionate} }",
+        "selected-entities": "{ count, plural, 1 {1 entità selezionata} other {# entità selezionate} }",
         "entity-name": "Nome entità",
         "details": "Dettagli entità",
         "no-entities-prompt": "Nessuna entità trovata",
@@ -772,7 +772,7 @@
     },
     "extension": {
         "extensions": "Estensioni",
-        "selected-extensions": "{ count, select, 1 {1 estensione selezionata} other {# estensioni selezionate} }",
+        "selected-extensions": "{ count, plural, 1 {1 estensione selezionata} other {# estensioni selezionate} }",
         "type": "Tipo",
         "key": "Chiave",
         "value": "Valore",
@@ -786,7 +786,7 @@
         "edit": "Modifica estensione",
         "delete-extension-title": "Sei sicuro di voler eliminare l'estensione '{{extensionId}}'?",
         "delete-extension-text": "Attenzione, dopo la conferma l'estensione e tutti i suoi data non saranno più recuperabili.",
-        "delete-extensions-title": "Sei sicuro di voler eliminare { count, select, 1 {1 estensione} other {# estensioni} }?",
+        "delete-extensions-title": "Sei sicuro di voler eliminare { count, plural, 1 {1 estensione} other {# estensioni} }?",
         "delete-extensions-text": "Attenzione, dopo la conferma tutte le estensioni selezionate saranno eliminate.",
         "converters": "Converters",
         "converter-id": "Converter id",
@@ -939,8 +939,8 @@
     "grid": {
         "delete-item-title": "Are you sure you want to delete this item?",
         "delete-item-text": "Be careful, after the confirmation this item and all related data will become unrecoverable.",
-        "delete-items-title": "Are you sure you want to delete { count, select, 1 {1 item} other {# items} }?",
-        "delete-items-action-title": "Delete { count, select, 1 {1 item} other {# items} }",
+        "delete-items-title": "Are you sure you want to delete { count, plural, 1 {1 item} other {# items} }?",
+        "delete-items-action-title": "Delete { count, plural, 1 {1 item} other {# items} }",
         "delete-items-text": "Be careful, after the confirmation all selected items will be removed and all related data will become unrecoverable.",
         "add-item-text": "Add new item",
         "no-items-text": "No items found",
@@ -1041,7 +1041,7 @@
         },
         "from-relations": "Outbound relations",
         "to-relations": "Inbound relations",
-        "selected-relations": "{ count, select, 1 {1 relation} other {# relations} } selected",
+        "selected-relations": "{ count, plural, 1 {1 relation} other {# relations} } selected",
         "type": "Tipo",
         "to-entity-type": "A tipo entità",
         "to-entity-name": "A nome entità",
@@ -1057,11 +1057,11 @@
         "edit": "Edit relation",
         "delete-to-relation-title": "Are you sure you want to delete relation to the entity '{{entityName}}'?",
         "delete-to-relation-text": "Attenzione, dopo la conferma l'entità '{{entityName}}' sarà scollegata dall'entità corrente.",
-        "delete-to-relations-title": "Are you sure you want to delete { count, select, 1 {1 relation} other {# relations} }?",
+        "delete-to-relations-title": "Are you sure you want to delete { count, plural, 1 {1 relation} other {# relations} }?",
         "delete-to-relations-text": "Be careful, after the confirmation all selected relations will be removed and corresponding entities will be unrelated from the current entity.",
         "delete-from-relation-title": "Are you sure you want to delete relation from the entity '{{entityName}}'?",
         "delete-from-relation-text": "Be careful, after the confirmation current entity will be unrelated from the entity '{{entityName}}'.",
-        "delete-from-relations-title": "Are you sure you want to delete { count, select, 1 {1 relation} other {# relations} }?",
+        "delete-from-relations-title": "Are you sure you want to delete { count, plural, 1 {1 relation} other {# relations} }?",
         "delete-from-relations-text": "Be careful, after the confirmation all selected relations will be removed and current entity will be unrelated from the corresponding entities.",
         "remove-relation-filter": "Remove relation filter",
         "add-relation-filter": "Add relation filter",
@@ -1084,8 +1084,8 @@
         "set-root-rulechain-text": "After the confirmation the rule chain will become root and will handle all incoming transport messages.",
         "delete-rulechain-title": "Are you sure you want to delete the rule chain '{{ruleChainName}}'?",
         "delete-rulechain-text": "Be careful, after the confirmation the rule chain and all related data will become unrecoverable.",
-        "delete-rulechains-title": "Are you sure you want to delete { count, select, 1 {1 rule chain} other {# rule chains} }?",
-        "delete-rulechains-action-title": "Delete { count, select, 1 {1 rule chain} other {# rule chains} }",
+        "delete-rulechains-title": "Are you sure you want to delete { count, plural, 1 {1 rule chain} other {# rule chains} }?",
+        "delete-rulechains-action-title": "Delete { count, plural, 1 {1 rule chain} other {# rule chains} }",
         "delete-rulechains-text": "Be careful, after the confirmation all selected rule chains will be removed and all related data will become unrecoverable.",
         "add-rulechain-text": "Add new rule chain",
         "no-rulechains-text": "No rule chains found",
@@ -1175,8 +1175,8 @@
         "tenant-details": "Dettagli tenant",
         "delete-tenant-title": "Sei sicuro di voler eliminare il tenant '{{tenantTitle}}'?",
         "delete-tenant-text": "Attenzione, dopo la conferma il tenant e tutti i suoi dati non saranno più recuperabili.",
-        "delete-tenants-title": "Sei sicuro di voler eliminare { count, select, 1 {1 tenant} other {# tenant} }?",
-        "delete-tenants-action-title": "Elimina { count, select, 1 {1 tenant} other {# tenant} }",
+        "delete-tenants-title": "Sei sicuro di voler eliminare { count, plural, 1 {1 tenant} other {# tenant} }?",
+        "delete-tenants-action-title": "Elimina { count, plural, 1 {1 tenant} other {# tenant} }",
         "delete-tenants-text": "Attenzione, dopo la conferma tutti i tenant selezionati saranno eliminati e tutti i loro dati non saranno più recuperabili.",
         "title": "Titolo",
         "title-required": "Titolo obbligatorio.",
@@ -1190,10 +1190,10 @@
         "tenant-required": "Tenant obbligatorio"
     },
     "timeinterval": {
-        "seconds-interval": "{ seconds, select, 1 {1 secondo} other {# secondi} }",
-        "minutes-interval": "{ minutes, select, 1 {1 minuto} other {# minuti} }",
-        "hours-interval": "{ hours, select, 1 {1 ora} other {# ore} }",
-        "days-interval": "{ days, select, 1 {1 giorno} other {# giorni} }",
+        "seconds-interval": "{ seconds, plural, 1 {1 secondo} other {# secondi} }",
+        "minutes-interval": "{ minutes, plural, 1 {1 minuto} other {# minuti} }",
+        "hours-interval": "{ hours, plural, 1 {1 ora} other {# ore} }",
+        "days-interval": "{ days, plural, 1 {1 giorno} other {# giorni} }",
         "days": "Giorni",
         "hours": "Ore",
         "minutes": "Minuti",
@@ -1201,10 +1201,10 @@
         "advanced": "Avanzate"
     },
     "timewindow": {
-        "days": "{ days, select, 1 { giorno } other {# giorni } }",
-        "hours": "{ hours, select, 0 { hour } 1 {1 ora } other {# ore } }",
-        "minutes": "{ minutes, select, 0 { minute } 1 {1 minuto } other {# minuti } }",
-        "seconds": "{ seconds, select, 0 { second } 1 {1 secondo } other {# secondi } }",
+        "days": "{ days, plural, 1 { giorno } other {# giorni } }",
+        "hours": "{ hours, plural, 0 { hour } 1 {1 ora } other {# ore } }",
+        "minutes": "{ minutes, plural, 0 { minute } 1 {1 minuto } other {# minuti } }",
+        "seconds": "{ seconds, plural, 0 { second } 1 {1 secondo } other {# secondi } }",
         "realtime": "Realtime",
         "history": "Cronologia",
         "last-prefix": "last",
@@ -1230,8 +1230,8 @@
         "user-details": "Dettagli utente",
         "delete-user-title": "Sei sicuro di voler eliminare l'utente '{{userEmail}}'?",
         "delete-user-text": "Attenzione, dopo la conferma l'utente e tutti i suoi dati non saranno più recuperabili.",
-        "delete-users-title": "Sei sicuro di voler eliminare { count, select, 1 {1 utente} other {# utenti} }?",
-        "delete-users-action-title": "Elimina { count, select, 1 {1 utente} other {# utenti} }",
+        "delete-users-title": "Sei sicuro di voler eliminare { count, plural, 1 {1 utente} other {# utenti} }?",
+        "delete-users-action-title": "Elimina { count, plural, 1 {1 utente} other {# utenti} }",
         "delete-users-text": "Attenzione, dopo la conferma tutti gli utenti selezionati saranno eliminati e tutti i relativi dati non saranno più recuperabili.",
         "activation-email-sent-message": "Email di attivazione inviata con successo!",
         "resend-activation": "Resend activation",
@@ -1348,8 +1348,8 @@
         "widgets-bundle-details": "Dettagli bundle widget",
         "delete-widgets-bundle-title": "Sei sicuro di voler eliminare il bundle widget '{{widgetsBundleTitle}}'?",
         "delete-widgets-bundle-text": "Attenzione, dopo la conferma il bundle widget e tutti i suoi dati non saranno più recuperabili.",
-        "delete-widgets-bundles-title": "Sei sicuro di voler eliminare { count, select, 1 {1 bundle widget} other {# bundle widget} }?",
-        "delete-widgets-bundles-action-title": "Elimina { count, select, 1 {1 bundle widget} other {# bundle widget} }",
+        "delete-widgets-bundles-title": "Sei sicuro di voler eliminare { count, plural, 1 {1 bundle widget} other {# bundle widget} }?",
+        "delete-widgets-bundles-action-title": "Elimina { count, plural, 1 {1 bundle widget} other {# bundle widget} }",
         "delete-widgets-bundles-text": "Attenzione, dopo la conferma tutti i bundle widget selezionati saranno rimossi e tutti i loro dati non saranno più recuperabili.",
         "no-widgets-bundles-matching": "Nessun bundle widget corrispondente a  '{{widgetsBundle}}' è stato trovato.",
         "widgets-bundle-required": "Bundle widget obbligatorio.",
@@ -1385,7 +1385,7 @@
         "use-dashboard-timewindow": "Use dashboard timewindow",
         "display-legend": "Mostra legenda",
         "datasources": "Sorgenti dei dati",
-        "maximum-datasources": "Massimo { count, select, 1 {1 sorgente dati consentita.} other {# sorgenti dati consentite} }",
+        "maximum-datasources": "Massimo { count, plural, 1 {1 sorgente dati consentita.} other {# sorgenti dati consentite} }",
         "datasource-type": "Tipo",
         "datasource-parameters": "Parametri",
         "remove-datasource": "Rimuovi sorgente dati",
diff --git a/ui/src/app/locale/locale.constant-ko_KR.json b/ui/src/app/locale/locale.constant-ko_KR.json
index 87ae3ca..a0d9e0d 100644
--- a/ui/src/app/locale/locale.constant-ko_KR.json
+++ b/ui/src/app/locale/locale.constant-ko_KR.json
@@ -127,15 +127,15 @@
         "acknowledge": "Acknowledge",
         "clear": "Clear",
         "search": "Search alarms",
-        "selected-alarms": "{ count, select, 1 {1 alarm} other {# alarms} } selected",
+        "selected-alarms": "{ count, plural, 1 {1 alarm} other {# alarms} } selected",
         "no-data": "No data to display",
         "polling-interval": "Alarms polling interval (sec)",
         "polling-interval-required": "Alarms polling interval is required.",
         "min-polling-interval-message": "At least 1 sec polling interval is allowed.",
-        "aknowledge-alarms-title": "Acknowledge { count, select, 1 {1 alarm} other {# alarms} }",
-        "aknowledge-alarms-text": "Are you sure you want to acknowledge { count, select, 1 {1 alarm} other {# alarms} }?",
-        "clear-alarms-title": "Clear { count, select, 1 {1 alarm} other {# alarms} }",
-        "clear-alarms-text": "Are you sure you want to clear { count, select, 1 {1 alarm} other {# alarms} }?"
+        "aknowledge-alarms-title": "Acknowledge { count, plural, 1 {1 alarm} other {# alarms} }",
+        "aknowledge-alarms-text": "Are you sure you want to acknowledge { count, plural, 1 {1 alarm} other {# alarms} }?",
+        "clear-alarms-title": "Clear { count, plural, 1 {1 alarm} other {# alarms} }",
+        "clear-alarms-text": "Are you sure you want to clear { count, plural, 1 {1 alarm} other {# alarms} }?"
     },
     "alias": {
         "add": "Add alias",
@@ -213,15 +213,15 @@
         "add-asset-text": "Add new asset",
         "asset-details": "Asset details",
         "assign-assets": "Assign assets",
-        "assign-assets-text": "Assign { count, select, 1 {1 asset} other {# assets} } to customer",
+        "assign-assets-text": "Assign { count, plural, 1 {1 asset} other {# assets} } to customer",
         "delete-assets": "Delete assets",
         "unassign-assets": "Unassign assets",
-        "unassign-assets-action-title": "Unassign { count, select, 1 {1 asset} other {# assets} } from customer",
+        "unassign-assets-action-title": "Unassign { count, plural, 1 {1 asset} other {# assets} } from customer",
         "assign-new-asset": "Assign new asset",
         "delete-asset-title": "Are you sure you want to delete the asset '{{assetName}}'?",
         "delete-asset-text": "Be careful, after the confirmation the asset and all related data will become unrecoverable.",
-        "delete-assets-title": "Are you sure you want to delete { count, select, 1 {1 asset} other {# assets} }?",
-        "delete-assets-action-title": "Delete { count, select, 1 {1 asset} other {# assets} }",
+        "delete-assets-title": "Are you sure you want to delete { count, plural, 1 {1 asset} other {# assets} }?",
+        "delete-assets-action-title": "Delete { count, plural, 1 {1 asset} other {# assets} }",
         "delete-assets-text": "Be careful, after the confirmation all selected assets will be removed and all related data will become unrecoverable.",
         "make-public-asset-title": "Are you sure you want to make the asset '{{assetName}}' public?",
         "make-public-asset-text": "After the confirmation the asset and all its data will be made public and accessible by others.",
@@ -230,7 +230,7 @@
         "unassign-asset-title": "Are you sure you want to unassign the asset '{{assetName}}'?",
         "unassign-asset-text": "After the confirmation the asset will be unassigned and won't be accessible by the customer.",
         "unassign-asset": "Unassign asset",
-        "unassign-assets-title": "Are you sure you want to unassign { count, select, 1 {1 asset} other {# assets} }?",
+        "unassign-assets-title": "Are you sure you want to unassign { count, plural, 1 {1 asset} other {# assets} }?",
         "unassign-assets-text": "After the confirmation all selected assets will be unassigned and won't be accessible by the customer.",
         "copyId": "Copy asset Id",
         "idCopiedMessage": "Asset Id has been copied to clipboard",
@@ -252,7 +252,7 @@
         "key-required": "속성 key를 입력하세요.",
         "value": "Value",
         "value-required": "속성 value를 입력하세요.",
-        "delete-attributes-title": "{ count, select, 1 {속성} other {여러 속성들을} } 삭제하시겠습니까??",
+        "delete-attributes-title": "{ count, plural, 1 {속성} other {여러 속성들을} } 삭제하시겠습니까??",
         "delete-attributes-text": "모든 선택된 속성들이 제거 될 것이므로 주의하십시오.",
         "delete-attributes": "속성 삭제",
         "enter-attribute-value": "속성 값 입력",
@@ -262,8 +262,8 @@
         "prev-widget": "이전 위젯",
         "add-to-dashboard": "대시보드에 추가",
         "add-widget-to-dashboard": "대시보드에 위젯 추가",
-        "selected-attributes": "{ count, select, 1 {속성 1개} other {속성 #개} } 선택됨",
-        "selected-telemetry": "{ count, select, 1 {최근 데이터 1개} other {최근 데이터 #개} } 선택됨"
+        "selected-attributes": "{ count, plural, 1 {속성 1개} other {속성 #개} } 선택됨",
+        "selected-telemetry": "{ count, plural, 1 {최근 데이터 1개} other {최근 데이터 #개} } 선택됨"
     },
     "audit-log": {
         "audit": "Audit",
@@ -346,8 +346,8 @@
         "customer-details": "커스터머 상세정보",
         "delete-customer-title": "'{{customerTitle}}' 커스터머를 삭제하시겠습니까?",
         "delete-customer-text": "커스터머 및 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
-        "delete-customers-title": "{ count, select, 1 {커스터머 1개} other {커스터머 #개} }를 삭제하시겠습니까?",
-        "delete-customers-action-title": "{ count, select, 1 {커스터머 1개} other {커스터머 #개} } 삭제",
+        "delete-customers-title": "{ count, plural, 1 {커스터머 1개} other {커스터머 #개} }를 삭제하시겠습니까?",
+        "delete-customers-action-title": "{ count, plural, 1 {커스터머 1개} other {커스터머 #개} } 삭제",
         "delete-customers-text": "선택된 커스터머는 삭제되고 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
         "manage-users": "사용자 관리",
         "manage-devices": "디바이스 관리",
@@ -397,19 +397,19 @@
         "add-dashboard-text": "대시보드 추가",
         "assign-dashboards": "대시보드 지정",
         "assign-new-dashboard": "새 대시보드 할당",
-        "assign-dashboards-text": "{ count, select, 1 {대시보드 1개} other {대시보드 #개} }를 커스터머 할당",
+        "assign-dashboards-text": "{ count, plural, 1 {대시보드 1개} other {대시보드 #개} }를 커스터머 할당",
         "delete-dashboards": "대시보드 삭제",
         "unassign-dashboards": "대시보드 할당 취소",
-        "unassign-dashboards-action-title": "{ count, select, 1 {대시보드 1개} other {대시보드 #개} }를 커스터머 할당 취소",
+        "unassign-dashboards-action-title": "{ count, plural, 1 {대시보드 1개} other {대시보드 #개} }를 커스터머 할당 취소",
         "delete-dashboard-title": "'{{dashboardTitle}}' 대시보드를 삭제하시겠습니까?",
         "delete-dashboard-text": "대시보드 및 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
-        "delete-dashboards-title": "{ count, select, 1 {대시보드 1개} other {대시보드 #개} }를 삭제하시겠습니까?",
-        "delete-dashboards-action-title": "{ count, select, 1 {대시보드 1개} other {대시보드 #개} } 삭제",
+        "delete-dashboards-title": "{ count, plural, 1 {대시보드 1개} other {대시보드 #개} }를 삭제하시겠습니까?",
+        "delete-dashboards-action-title": "{ count, plural, 1 {대시보드 1개} other {대시보드 #개} } 삭제",
         "delete-dashboards-text": "선택된 대시보드가 삭제되고 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
         "unassign-dashboard-title": "'{{dashboardTitle}}' 대시보드 할당을 해제하시겠습니까?",
         "unassign-dashboard-text": "대시보드가 할당 해제되고 커스터머는 액세스 할 수 없게됩니다.",
         "unassign-dashboard": "대시보드 할달 취소",
-        "unassign-dashboards-title": "{ count, select, 1 {대시보드 1개} other {대시보드 #개} }의 할당을 취소하시겠습니까?",
+        "unassign-dashboards-title": "{ count, plural, 1 {대시보드 1개} other {대시보드 #개} }의 할당을 취소하시겠습니까?",
         "unassign-dashboards-text": "선택된 대시보드가 할당 해제되고 커스터머는 액세스 할 수 없게됩니다.",
         "select-dashboard": "대시보드 선택",
         "no-dashboards-matching": "'{{entity}}'와 일치하는 대시보드가 없습니다.",
@@ -472,11 +472,11 @@
         "attributes": "Attributes",
         "timeseries-required": "디바이스 timeseries 를 입력하세요.",
         "timeseries-or-attributes-required": "디바이스 timeseries/attributes 를 입력하세요.",
-        "maximum-timeseries-or-attributes": "Maximum { count, select, 1 {1 timeseries/attribute is allowed.} other {# timeseries/attributes are allowed} }",
+        "maximum-timeseries-or-attributes": "Maximum { count, plural, 1 {1 timeseries/attribute is allowed.} other {# timeseries/attributes are allowed} }",
         "alarm-fields-required": "Alarm fields are required.",
         "function-types": "함수 유형",
         "function-types-required": "함수 유형을 입력하세요.",
-        "maximum-function-types": "Maximum { count, select, 1 {1 function type is allowed.} other {# function types are allowed} }"
+        "maximum-function-types": "Maximum { count, plural, 1 {1 function type is allowed.} other {# function types are allowed} }"
     },
     "datasource": {
         "type": "데이터소스 유형",
@@ -526,22 +526,22 @@
         "manage-credentials": "크리덴셜 관리",
         "delete": "디바이스 삭제",
         "assign-devices": "디바이스 할당",
-        "assign-devices-text": "{ count, select, 1 {디바이스 1개} other {디바이스 #개} }를 커서터머에 할당",
+        "assign-devices-text": "{ count, plural, 1 {디바이스 1개} other {디바이스 #개} }를 커서터머에 할당",
         "delete-devices": "디바이스 삭제",
         "unassign-from-customer": "커스터머 할당 해제",
         "unassign-devices": "디바이스 할당 취소",
-        "unassign-devices-action-title": "{ count, select, 1 {디바이스 1개} other {디바이스 #개} }를 커스터머에게서 할당 해제",
+        "unassign-devices-action-title": "{ count, plural, 1 {디바이스 1개} other {디바이스 #개} }를 커스터머에게서 할당 해제",
         "assign-new-device": "새로운 디바이스 할당",
         "view-credentials": "크리덴셜 보기",
         "delete-device-title": "'{{deviceName}}' 디바이스를 삭제하시겠습니까?",
         "delete-device-text": "디바이스 및 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
-        "delete-devices-title": "{ count, select, 1 {디바이스 1개} other {디바이스 #개} }를 삭제하시겠습니까?",
-        "delete-devices-action-title": "{ count, select, 1 {디바이스 1개} other {디바이스 #개} } 삭제",
+        "delete-devices-title": "{ count, plural, 1 {디바이스 1개} other {디바이스 #개} }를 삭제하시겠습니까?",
+        "delete-devices-action-title": "{ count, plural, 1 {디바이스 1개} other {디바이스 #개} } 삭제",
         "delete-devices-text": "선택된 디바이스가 삭제되고 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
         "unassign-device-title": "'{{deviceName}}' 디바이스 할당을 해제하시겠습니까?",
         "unassign-device-text": "디바이스가 할당 해제되고 커스터머는 액세스 할 수 없게됩니다.",
         "unassign-device": "디바이스 할당 취소",
-        "unassign-devices-title": "{ count, select, 1 {디바이스 1개} other {디바이스 #개} }의  할당을 해제하시겠습니까??",
+        "unassign-devices-title": "{ count, plural, 1 {디바이스 1개} other {디바이스 #개} }의  할당을 해제하시겠습니까??",
         "unassign-devices-text": "선택된 디바이스가 할당 해제되고 커스터머는 액세스 할 수 없게됩니다.",
         "device-credentials": "디바이스 크리덴셜",
         "credentials-type": "크리덴셜 타입",
@@ -616,47 +616,47 @@
         "type-required": "Entity type is required.",
         "type-device": "Device",
         "type-devices": "Devices",
-        "list-of-devices": "{ count, select, 1 {One device} other {List of # devices} }",
+        "list-of-devices": "{ count, plural, 1 {One device} other {List of # devices} }",
         "device-name-starts-with": "Devices whose names start with '{{prefix}}'",
         "type-asset": "Asset",
         "type-assets": "Assets",
-        "list-of-assets": "{ count, select, 1 {One asset} other {List of # assets} }",
+        "list-of-assets": "{ count, plural, 1 {One asset} other {List of # assets} }",
         "asset-name-starts-with": "Assets whose names start with '{{prefix}}'",
         "type-rule": "Rule",
         "type-rules": "Rules",
-        "list-of-rules": "{ count, select, 1 {One rule} other {List of # rules} }",
+        "list-of-rules": "{ count, plural, 1 {One rule} other {List of # rules} }",
         "rule-name-starts-with": "Rules whose names start with '{{prefix}}'",
         "type-plugin": "Plugin",
         "type-plugins": "Plugins",
-        "list-of-plugins": "{ count, select, 1 {One plugin} other {List of # plugins} }",
+        "list-of-plugins": "{ count, plural, 1 {One plugin} other {List of # plugins} }",
         "plugin-name-starts-with": "Plugins whose names start with '{{prefix}}'",
         "type-tenant": "Tenant",
         "type-tenants": "Tenants",
-        "list-of-tenants": "{ count, select, 1 {One tenant} other {List of # tenants} }",
+        "list-of-tenants": "{ count, plural, 1 {One tenant} other {List of # tenants} }",
         "tenant-name-starts-with": "Tenants whose names start with '{{prefix}}'",
         "type-customer": "Customer",
         "type-customers": "Customers",
-        "list-of-customers": "{ count, select, 1 {One customer} other {List of # customers} }",
+        "list-of-customers": "{ count, plural, 1 {One customer} other {List of # customers} }",
         "customer-name-starts-with": "Customers whose names start with '{{prefix}}'",
         "type-user": "User",
         "type-users": "Users",
-        "list-of-users": "{ count, select, 1 {One user} other {List of # users} }",
+        "list-of-users": "{ count, plural, 1 {One user} other {List of # users} }",
         "user-name-starts-with": "Users whose names start with '{{prefix}}'",
         "type-dashboard": "Dashboard",
         "type-dashboards": "Dashboards",
-        "list-of-dashboards": "{ count, select, 1 {One dashboard} other {List of # dashboards} }",
+        "list-of-dashboards": "{ count, plural, 1 {One dashboard} other {List of # dashboards} }",
         "dashboard-name-starts-with": "Dashboards whose names start with '{{prefix}}'",
         "type-alarm": "Alarm",
         "type-alarms": "Alarms",
-        "list-of-alarms": "{ count, select, 1 {One alarms} other {List of # alarms} }",
+        "list-of-alarms": "{ count, plural, 1 {One alarms} other {List of # alarms} }",
         "alarm-name-starts-with": "Alarms whose names start with '{{prefix}}'",
         "type-rulechain": "Rule chain",
         "type-rulechains": "Rule chains",
-        "list-of-rulechains": "{ count, select, 1 {One rule chain} other {List of # rule chains} }",
+        "list-of-rulechains": "{ count, plural, 1 {One rule chain} other {List of # rule chains} }",
         "rulechain-name-starts-with": "Rule chains whose names start with '{{prefix}}'",
         "type-current-customer": "Current Customer",
         "search": "Search entities",
-        "selected-entities": "{ count, select, 1 {1 entity} other {# entities} } selected",
+        "selected-entities": "{ count, plural, 1 {1 entity} other {# entities} } selected",
         "entity-name": "Entity name",
         "details": "Entity details",
         "no-entities-prompt": "No entities found",
@@ -693,7 +693,7 @@
     },
     "extension": {
         "extensions": "Extensions",
-        "selected-extensions": "{ count, select, 1 {1 extension} other {# extensions} } selected",
+        "selected-extensions": "{ count, plural, 1 {1 extension} other {# extensions} } selected",
         "type": "Type",
         "key": "Key",
         "value": "Value",
@@ -707,7 +707,7 @@
         "edit": "Edit extension",
         "delete-extension-title": "Are you sure you want to delete the extension '{{extensionId}}'?",
         "delete-extension-text": "Be careful, after the confirmation the extension and all related data will become unrecoverable.",
-        "delete-extensions-title": "Are you sure you want to delete { count, select, 1 {1 extension} other {# extensions} }?",
+        "delete-extensions-title": "Are you sure you want to delete { count, plural, 1 {1 extension} other {# extensions} }?",
         "delete-extensions-text": "Be careful, after the confirmation all selected extensions will be removed.",
         "converters": "Converters",
         "converter-id": "Converter id",
@@ -860,8 +860,8 @@
     "grid": {
         "delete-item-title": "이 항목을 삭제 하시겠습니까?",
         "delete-item-text": "항목과 모든 관련 데이터를 복구 할 수 없으므로 주의하십시오.",
-        "delete-items-title": "{ count, select, 1 {아이템 1개} other {아이템 #개} }를 삭제하시겠습니까?",
-        "delete-items-action-title": "{ count, select, 1 {아이템 1개} other {아이템 #개} } 삭제",
+        "delete-items-title": "{ count, plural, 1 {아이템 1개} other {아이템 #개} }를 삭제하시겠습니까?",
+        "delete-items-action-title": "{ count, plural, 1 {아이템 1개} other {아이템 #개} } 삭제",
         "delete-items-text": "선택한 모든 아이템이 제거되고 관련된 모든 데이터는 복구 할 수 없으므로 주의하십시오.",
         "add-item-text": "새로운 아이템 추가",
         "no-items-text": "아이템이 없습니다.",
@@ -962,7 +962,7 @@
         },
         "from-relations": "Outbound relations",
         "to-relations": "Inbound relations",
-        "selected-relations": "{ count, select, 1 {1 relation} other {# relations} } selected",
+        "selected-relations": "{ count, plural, 1 {1 relation} other {# relations} } selected",
         "type": "Type",
         "to-entity-type": "To entity type",
         "to-entity-name": "To entity name",
@@ -978,11 +978,11 @@
         "edit": "Edit relation",
         "delete-to-relation-title": "Are you sure you want to delete relation to the entity '{{entityName}}'?",
         "delete-to-relation-text": "Be careful, after the confirmation the entity '{{entityName}}' will be unrelated from the current entity.",
-        "delete-to-relations-title": "Are you sure you want to delete { count, select, 1 {1 relation} other {# relations} }?",
+        "delete-to-relations-title": "Are you sure you want to delete { count, plural, 1 {1 relation} other {# relations} }?",
         "delete-to-relations-text": "Be careful, after the confirmation all selected relations will be removed and corresponding entities will be unrelated from the current entity.",
         "delete-from-relation-title": "Are you sure you want to delete relation from the entity '{{entityName}}'?",
         "delete-from-relation-text": "Be careful, after the confirmation current entity will be unrelated from the entity '{{entityName}}'.",
-        "delete-from-relations-title": "Are you sure you want to delete { count, select, 1 {1 relation} other {# relations} }?",
+        "delete-from-relations-title": "Are you sure you want to delete { count, plural, 1 {1 relation} other {# relations} }?",
         "delete-from-relations-text": "Be careful, after the confirmation all selected relations will be removed and current entity will be unrelated from the corresponding entities.",
         "remove-relation-filter": "Remove relation filter",
         "add-relation-filter": "Add relation filter",
@@ -1005,8 +1005,8 @@
         "set-root-rulechain-text": "After the confirmation the rule chain will become root and will handle all incoming transport messages.",
         "delete-rulechain-title": "Are you sure you want to delete the rule chain '{{ruleChainName}}'?",
         "delete-rulechain-text": "Be careful, after the confirmation the rule chain and all related data will become unrecoverable.",
-        "delete-rulechains-title": "Are you sure you want to delete { count, select, 1 {1 rule chain} other {# rule chains} }?",
-        "delete-rulechains-action-title": "Delete { count, select, 1 {1 rule chain} other {# rule chains} }",
+        "delete-rulechains-title": "Are you sure you want to delete { count, plural, 1 {1 rule chain} other {# rule chains} }?",
+        "delete-rulechains-action-title": "Delete { count, plural, 1 {1 rule chain} other {# rule chains} }",
         "delete-rulechains-text": "Be careful, after the confirmation all selected rule chains will be removed and all related data will become unrecoverable.",
         "add-rulechain-text": "Add new rule chain",
         "no-rulechains-text": "No rule chains found",
@@ -1095,8 +1095,8 @@
         "tenant-details": "테넌트 상세정보",
         "delete-tenant-title": "'{{tenantTitle}}' 테넌트를 삭제하시겠습니까?",
         "delete-tenant-text": "테넌트와 관련된 모든 정보를 복구할 수 없으므로 주의하십시오.",
-        "delete-tenants-title": "{ count, select, 1 {테넌트 1개} other {테넌트 #개} }를 삭제하시겠습니까?",
-        "delete-tenants-action-title": "{ count, select, 1 {테넌트 1개} other {테넌트 #개} } 삭제",
+        "delete-tenants-title": "{ count, plural, 1 {테넌트 1개} other {테넌트 #개} }를 삭제하시겠습니까?",
+        "delete-tenants-action-title": "{ count, plural, 1 {테넌트 1개} other {테넌트 #개} } 삭제",
         "delete-tenants-text": "선택된 테넌트가 삭제되고 관련된 모든 정보를 복구할 수 없으므로 주의하십시오.",
         "title": "타이틀",
         "title-required": "타이틀을 입력하세요.",
@@ -1110,10 +1110,10 @@
         "tenant-required": "Tenant is required"
     },
     "timeinterval": {
-        "seconds-interval": "{ seconds, select, 1 {1 second} other {# seconds} }",
-        "minutes-interval": "{ minutes, select, 1 {1 minute} other {# minutes} }",
-        "hours-interval": "{ hours, select, 1 {1 hour} other {# hours} }",
-        "days-interval": "{ days, select, 1 {1 day} other {# days} }",
+        "seconds-interval": "{ seconds, plural, 1 {1 second} other {# seconds} }",
+        "minutes-interval": "{ minutes, plural, 1 {1 minute} other {# minutes} }",
+        "hours-interval": "{ hours, plural, 1 {1 hour} other {# hours} }",
+        "days-interval": "{ days, plural, 1 {1 day} other {# days} }",
         "days": "Days",
         "hours": "Hours",
         "minutes": "Minutes",
@@ -1121,10 +1121,10 @@
         "advanced": "고급"
     },
     "timewindow": {
-        "days": "{ days, select, 1 { day } other {# days } }",
-        "hours": "{ hours, select, 0 { hour } 1 {1 hour } other {# hours } }",
-        "minutes": "{ minutes, select, 0 { minute } 1 {1 minute } other {# minutes } }",
-        "seconds": "{ seconds, select, 0 { second } 1 {1 second } other {# seconds } }",
+        "days": "{ days, plural, 1 { day } other {# days } }",
+        "hours": "{ hours, plural, 0 { hour } 1 {1 hour } other {# hours } }",
+        "minutes": "{ minutes, plural, 0 { minute } 1 {1 minute } other {# minutes } }",
+        "seconds": "{ seconds, plural, 0 { second } 1 {1 second } other {# seconds } }",
         "realtime": "Realtime",
         "history": "History",
         "last-prefix": "last",
@@ -1149,8 +1149,8 @@
         "user-details": "사용자 상세정보",
         "delete-user-title": "'{{userEmail}}' 사용자를 삭제하시겠습니까?",
         "delete-user-text": "사용자와 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
-        "delete-users-title": "{ count, select, 1 {사용자 1명} other {사용자 #명} }을 삭제하시겠니까?",
-        "delete-users-action-title": "{ count, select, 1 {사용자 1명} other {사용자 #명} } 삭제",
+        "delete-users-title": "{ count, plural, 1 {사용자 1명} other {사용자 #명} }을 삭제하시겠니까?",
+        "delete-users-action-title": "{ count, plural, 1 {사용자 1명} other {사용자 #명} } 삭제",
         "delete-users-text": "선택된 사용자가 삭제된고 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
         "activation-email-sent-message": "활성화 이메일을 보냈습니다!",
         "resend-activation": "활성화 재전송",
@@ -1262,8 +1262,8 @@
         "widgets-bundle-details": "위젯 번들 상세정보",
         "delete-widgets-bundle-title": "'{{widgetsBundleTitle}}' 위젯 번들을 삭제하시겠습니까?",
         "delete-widgets-bundle-text": "위젯 번들과 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
-        "delete-widgets-bundles-title": "{ count, select, 1 {위젯 번들 1개} other {위젯 번들 #개} }를 삭제하시겠습니까?",
-        "delete-widgets-bundles-action-title": "{ count, select, 1 {위젯 번들 1개} other {위젯 번들 #개} } 삭제",
+        "delete-widgets-bundles-title": "{ count, plural, 1 {위젯 번들 1개} other {위젯 번들 #개} }를 삭제하시겠습니까?",
+        "delete-widgets-bundles-action-title": "{ count, plural, 1 {위젯 번들 1개} other {위젯 번들 #개} } 삭제",
         "delete-widgets-bundles-text": "선택된 위젯 번들이 삭제되고 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
         "no-widgets-bundles-matching": "'{{widgetsBundle}}' 와(과) 일치하는 위젯 번들을 찾을 수 없습니다.",
         "widgets-bundle-required": "위젯 번들을 입력하세요.",
diff --git a/ui/src/app/locale/locale.constant-ru_RU.json b/ui/src/app/locale/locale.constant-ru_RU.json
index 0a0edf1..2e384e9 100644
--- a/ui/src/app/locale/locale.constant-ru_RU.json
+++ b/ui/src/app/locale/locale.constant-ru_RU.json
@@ -123,15 +123,15 @@
         "acknowledge": "Acknowledge",
         "clear": "Clear",
         "search": "Search alarms",
-        "selected-alarms": "{ count, select, 1 {1 alarm} other {# alarms} } selected",
+        "selected-alarms": "{ count, plural, 1 {1 alarm} other {# alarms} } selected",
         "no-data": "No data to display",
         "polling-interval": "Alarms polling interval (sec)",
         "polling-interval-required": "Alarms polling interval is required.",
         "min-polling-interval-message": "At least 1 sec polling interval is allowed.",
-        "aknowledge-alarms-title": "Acknowledge { count, select, 1 {1 alarm} other {# alarms} }",
-        "aknowledge-alarms-text": "Are you sure you want to acknowledge { count, select, 1 {1 alarm} other {# alarms} }?",
-        "clear-alarms-title": "Clear { count, select, 1 {1 alarm} other {# alarms} }",
-        "clear-alarms-text": "Are you sure you want to clear { count, select, 1 {1 alarm} other {# alarms} }?"
+        "aknowledge-alarms-title": "Acknowledge { count, plural, 1 {1 alarm} other {# alarms} }",
+        "aknowledge-alarms-text": "Are you sure you want to acknowledge { count, plural, 1 {1 alarm} other {# alarms} }?",
+        "clear-alarms-title": "Clear { count, plural, 1 {1 alarm} other {# alarms} }",
+        "clear-alarms-text": "Are you sure you want to clear { count, plural, 1 {1 alarm} other {# alarms} }?"
     },
     "alias": {
         "add": "Add alias",
@@ -209,15 +209,15 @@
         "add-asset-text": "Add new asset",
         "asset-details": "Asset details",
         "assign-assets": "Assign assets",
-        "assign-assets-text": "Assign { count, select, 1 {1 asset} other {# assets} } to customer",
+        "assign-assets-text": "Assign { count, plural, 1 {1 asset} other {# assets} } to customer",
         "delete-assets": "Delete assets",
         "unassign-assets": "Unassign assets",
-        "unassign-assets-action-title": "Unassign { count, select, 1 {1 asset} other {# assets} } from customer",
+        "unassign-assets-action-title": "Unassign { count, plural, 1 {1 asset} other {# assets} } from customer",
         "assign-new-asset": "Assign new asset",
         "delete-asset-title": "Are you sure you want to delete the asset '{{assetName}}'?",
         "delete-asset-text": "Be careful, after the confirmation the asset and all related data will become unrecoverable.",
-        "delete-assets-title": "Are you sure you want to delete { count, select, 1 {1 asset} other {# assets} }?",
-        "delete-assets-action-title": "Delete { count, select, 1 {1 asset} other {# assets} }",
+        "delete-assets-title": "Are you sure you want to delete { count, plural, 1 {1 asset} other {# assets} }?",
+        "delete-assets-action-title": "Delete { count, plural, 1 {1 asset} other {# assets} }",
         "delete-assets-text": "Be careful, after the confirmation all selected assets will be removed and all related data will become unrecoverable.",
         "make-public-asset-title": "Are you sure you want to make the asset '{{assetName}}' public?",
         "make-public-asset-text": "After the confirmation the asset and all its data will be made public and accessible by others.",
@@ -226,7 +226,7 @@
         "unassign-asset-title": "Are you sure you want to unassign the asset '{{assetName}}'?",
         "unassign-asset-text": "After the confirmation the asset will be unassigned and won't be accessible by the customer.",
         "unassign-asset": "Unassign asset",
-        "unassign-assets-title": "Are you sure you want to unassign { count, select, 1 {1 asset} other {# assets} }?",
+        "unassign-assets-title": "Are you sure you want to unassign { count, plural, 1 {1 asset} other {# assets} }?",
         "unassign-assets-text": "After the confirmation all selected assets will be unassigned and won't be accessible by the customer.",
         "copyId": "Copy asset Id",
         "idCopiedMessage": "Asset Id has been copied to clipboard",
@@ -476,7 +476,7 @@
         "manage-states": "Manage dashboard states",
         "states": "Dashboard states",
         "search-states": "Search dashboard states",
-        "selected-states": "{ count, select, 1 {1 dashboard state} other {# dashboard states} } selected",
+        "selected-states": "{ count, plural, 1 {1 dashboard state} other {# dashboard states} } selected",
         "edit-state": "Edit dashboard state",
         "delete-state": "Delete dashboard state",
         "add-state": "Add dashboard state",
@@ -508,11 +508,11 @@
         "attributes": "Атрибуты",
         "timeseries-required": "Выборка по времени обязательна.",
         "timeseries-or-attributes-required": "Выборка по времени/атрибуты обязательны.",
-        "maximum-timeseries-or-attributes": "Maximum { count, select, 1 {1 timeseries/attribute is allowed.} other {# timeseries/attributes are allowed} }",
+        "maximum-timeseries-or-attributes": "Maximum { count, plural, 1 {1 timeseries/attribute is allowed.} other {# timeseries/attributes are allowed} }",
         "alarm-fields-required": "Alarm fields are required.",
         "function-types": "Тип функции",
         "function-types-required": "Тип функции обязателен.",
-        "maximum-function-types": "Maximum { count, select, 1 {1 function type is allowed.} other {# function types are allowed} }"
+        "maximum-function-types": "Maximum { count, plural, 1 {1 function type is allowed.} other {# function types are allowed} }"
     },
     "datasource": {
         "type": "Тип источника данных",
@@ -659,47 +659,47 @@
         "type-required": "Entity type is required.",
         "type-device": "Device",
         "type-devices": "Devices",
-        "list-of-devices": "{ count, select, 1 {One device} other {List of # devices} }",
+        "list-of-devices": "{ count, plural, 1 {One device} other {List of # devices} }",
         "device-name-starts-with": "Devices whose names start with '{{prefix}}'",
         "type-asset": "Asset",
         "type-assets": "Assets",
-        "list-of-assets": "{ count, select, 1 {One asset} other {List of # assets} }",
+        "list-of-assets": "{ count, plural, 1 {One asset} other {List of # assets} }",
         "asset-name-starts-with": "Assets whose names start with '{{prefix}}'",
         "type-rule": "Rule",
         "type-rules": "Rules",
-        "list-of-rules": "{ count, select, 1 {One rule} other {List of # rules} }",
+        "list-of-rules": "{ count, plural, 1 {One rule} other {List of # rules} }",
         "rule-name-starts-with": "Rules whose names start with '{{prefix}}'",
         "type-plugin": "Plugin",
         "type-plugins": "Plugins",
-        "list-of-plugins": "{ count, select, 1 {One plugin} other {List of # plugins} }",
+        "list-of-plugins": "{ count, plural, 1 {One plugin} other {List of # plugins} }",
         "plugin-name-starts-with": "Plugins whose names start with '{{prefix}}'",
         "type-tenant": "Tenant",
         "type-tenants": "Tenants",
-        "list-of-tenants": "{ count, select, 1 {One tenant} other {List of # tenants} }",
+        "list-of-tenants": "{ count, plural, 1 {One tenant} other {List of # tenants} }",
         "tenant-name-starts-with": "Tenants whose names start with '{{prefix}}'",
         "type-customer": "Customer",
         "type-customers": "Customers",
-        "list-of-customers": "{ count, select, 1 {One customer} other {List of # customers} }",
+        "list-of-customers": "{ count, plural, 1 {One customer} other {List of # customers} }",
         "customer-name-starts-with": "Customers whose names start with '{{prefix}}'",
         "type-user": "User",
         "type-users": "Users",
-        "list-of-users": "{ count, select, 1 {One user} other {List of # users} }",
+        "list-of-users": "{ count, plural, 1 {One user} other {List of # users} }",
         "user-name-starts-with": "Users whose names start with '{{prefix}}'",
         "type-dashboard": "Dashboard",
         "type-dashboards": "Dashboards",
-        "list-of-dashboards": "{ count, select, 1 {One dashboard} other {List of # dashboards} }",
+        "list-of-dashboards": "{ count, plural, 1 {One dashboard} other {List of # dashboards} }",
         "dashboard-name-starts-with": "Dashboards whose names start with '{{prefix}}'",
         "type-alarm": "Alarm",
         "type-alarms": "Alarms",
-        "list-of-alarms": "{ count, select, 1 {One alarms} other {List of # alarms} }",
+        "list-of-alarms": "{ count, plural, 1 {One alarms} other {List of # alarms} }",
         "alarm-name-starts-with": "Alarms whose names start with '{{prefix}}'",
         "type-rulechain": "Rule chain",
         "type-rulechains": "Rule chains",
-        "list-of-rulechains": "{ count, select, 1 {One rule chain} other {List of # rule chains} }",
+        "list-of-rulechains": "{ count, plural, 1 {One rule chain} other {List of # rule chains} }",
         "rulechain-name-starts-with": "Rule chains whose names start with '{{prefix}}'",
         "type-current-customer": "Current Customer",
         "search": "Search entities",
-        "selected-entities": "{ count, select, 1 {1 entity} other {# entities} } selected",
+        "selected-entities": "{ count, plural, 1 {1 entity} other {# entities} } selected",
         "entity-name": "Entity name",
         "details": "Entity details",
         "no-entities-prompt": "No entities found",
@@ -736,7 +736,7 @@
     },
     "extension": {
         "extensions": "Extensions",
-        "selected-extensions": "{ count, select, 1 {1 extension} other {# extensions} } selected",
+        "selected-extensions": "{ count, plural, 1 {1 extension} other {# extensions} } selected",
         "type": "Type",
         "key": "Key",
         "value": "Value",
@@ -750,7 +750,7 @@
         "edit": "Edit extension",
         "delete-extension-title": "Are you sure you want to delete the extension '{{extensionId}}'?",
         "delete-extension-text": "Be careful, after the confirmation the extension and all related data will become unrecoverable.",
-        "delete-extensions-title": "Are you sure you want to delete { count, select, 1 {1 extension} other {# extensions} }?",
+        "delete-extensions-title": "Are you sure you want to delete { count, plural, 1 {1 extension} other {# extensions} }?",
         "delete-extensions-text": "Be careful, after the confirmation all selected extensions will be removed.",
         "converters": "Converters",
         "converter-id": "Converter id",
@@ -1005,7 +1005,7 @@
         },
         "from-relations": "Outbound relations",
         "to-relations": "Inbound relations",
-        "selected-relations": "{ count, select, 1 {1 relation} other {# relations} } selected",
+        "selected-relations": "{ count, plural, 1 {1 relation} other {# relations} } selected",
         "type": "Type",
         "to-entity-type": "To entity type",
         "to-entity-name": "To entity name",
@@ -1021,11 +1021,11 @@
         "edit": "Edit relation",
         "delete-to-relation-title": "Are you sure you want to delete relation to the entity '{{entityName}}'?",
         "delete-to-relation-text": "Be careful, after the confirmation the entity '{{entityName}}' will be unrelated from the current entity.",
-        "delete-to-relations-title": "Are you sure you want to delete { count, select, 1 {1 relation} other {# relations} }?",
+        "delete-to-relations-title": "Are you sure you want to delete { count, plural, 1 {1 relation} other {# relations} }?",
         "delete-to-relations-text": "Be careful, after the confirmation all selected relations will be removed and corresponding entities will be unrelated from the current entity.",
         "delete-from-relation-title": "Are you sure you want to delete relation from the entity '{{entityName}}'?",
         "delete-from-relation-text": "Be careful, after the confirmation current entity will be unrelated from the entity '{{entityName}}'.",
-        "delete-from-relations-title": "Are you sure you want to delete { count, select, 1 {1 relation} other {# relations} }?",
+        "delete-from-relations-title": "Are you sure you want to delete { count, plural, 1 {1 relation} other {# relations} }?",
         "delete-from-relations-text": "Be careful, after the confirmation all selected relations will be removed and current entity will be unrelated from the corresponding entities.",
         "remove-relation-filter": "Remove relation filter",
         "add-relation-filter": "Add relation filter",
@@ -1048,8 +1048,8 @@
         "set-root-rulechain-text": "After the confirmation the rule chain will become root and will handle all incoming transport messages.",
         "delete-rulechain-title": "Are you sure you want to delete the rule chain '{{ruleChainName}}'?",
         "delete-rulechain-text": "Be careful, after the confirmation the rule chain and all related data will become unrecoverable.",
-        "delete-rulechains-title": "Are you sure you want to delete { count, select, 1 {1 rule chain} other {# rule chains} }?",
-        "delete-rulechains-action-title": "Delete { count, select, 1 {1 rule chain} other {# rule chains} }",
+        "delete-rulechains-title": "Are you sure you want to delete { count, plural, 1 {1 rule chain} other {# rule chains} }?",
+        "delete-rulechains-action-title": "Delete { count, plural, 1 {1 rule chain} other {# rule chains} }",
         "delete-rulechains-text": "Be careful, after the confirmation all selected rule chains will be removed and all related data will become unrecoverable.",
         "add-rulechain-text": "Add new rule chain",
         "no-rulechains-text": "No rule chains found",
diff --git a/ui/src/app/locale/locale.constant-zh_CN.json b/ui/src/app/locale/locale.constant-zh_CN.json
index 5f36af4..b55305a 100644
--- a/ui/src/app/locale/locale.constant-zh_CN.json
+++ b/ui/src/app/locale/locale.constant-zh_CN.json
@@ -126,15 +126,15 @@
         "acknowledge": "应答",
         "clear": "清除",
         "search": "搜索警告",
-        "selected-alarms": "已选择 { count, select, 1 {1 警告} other {# 警告} } ",
+        "selected-alarms": "已选择 { count, plural, 1 {1 警告} other {# 警告} } ",
         "no-data": "无数据显示",
         "polling-interval": "警告轮询间隔(秒)",
         "polling-interval-required": "警告轮询间隔必填。",
         "min-polling-interval-message": "轮询间隔至少是1秒。",
-        "aknowledge-alarms-title": "应答 { count, select, 1 {1 警告} other {# 警告} }",
-        "aknowledge-alarms-text": "确定要应答 { count, select, 1 {1 警告} other {# 警告} }?",
-        "clear-alarms-title": "清除 { count, select, 1 {1 警告} other {# 警告} }",
-        "clear-alarms-text": "确定要清除 { count, select, 1 {1 警告} other {# 警告} }?"
+        "aknowledge-alarms-title": "应答 { count, plural, 1 {1 警告} other {# 警告} }",
+        "aknowledge-alarms-text": "确定要应答 { count, plural, 1 {1 警告} other {# 警告} }?",
+        "clear-alarms-title": "清除 { count, plural, 1 {1 警告} other {# 警告} }",
+        "clear-alarms-text": "确定要清除 { count, plural, 1 {1 警告} other {# 警告} }?"
     },
     "alias": {
         "add": "添加别名",
@@ -212,15 +212,15 @@
         "add-asset-text": "添加新资产",
         "asset-details": "资产详情",
         "assign-assets": "分配资产",
-        "assign-assets-text": "分配 { count, select, 1 {1 资产} other {# 资产} } 给客户",
+        "assign-assets-text": "分配 { count, plural, 1 {1 资产} other {# 资产} } 给客户",
         "delete-assets": "删除资产",
         "unassign-assets": "取消分配资产",
-        "unassign-assets-action-title": "从客户处取消分配 { count, select, 1 {1 资产} other {# 资产} } ",
+        "unassign-assets-action-title": "从客户处取消分配 { count, plural, 1 {1 资产} other {# 资产} } ",
         "assign-new-asset": "分配新资产",
         "delete-asset-title": "确定要删除资产 '{{assetName}}'?",
         "delete-asset-text": "小心!确认后资产及其所有相关数据将不可恢复。",
-        "delete-assets-title": "确定要删除 { count, select, 1 {1 资产} other {# 资产} }?",
-        "delete-assets-action-title": "删除 { count, select, 1 {1 资产} other {# 资产} }",
+        "delete-assets-title": "确定要删除 { count, plural, 1 {1 资产} other {# 资产} }?",
+        "delete-assets-action-title": "删除 { count, plural, 1 {1 资产} other {# 资产} }",
         "delete-assets-text": "小心,确认后,所有选定的资产将被删除,所有相关的数据将变得不可恢复。",
         "make-public-asset-title": "你确定你想创建公开'{{assetName}}'资产?",
         "make-public-asset-text": "确认后,资产及其所有数据将被公开并被他人访问。",
@@ -229,7 +229,7 @@
         "unassign-asset-title": "您确定要取消对'{{assetName}}'资产的分配吗?",
         "unassign-asset-text": "确认后,资产将未分配,客户无法访问。",
         "unassign-asset": "未分配资产",
-        "unassign-assets-title": "您确定要取消分配 { count, select, 1 {1 资产} other {# 资产} }吗?",
+        "unassign-assets-title": "您确定要取消分配 { count, plural, 1 {1 资产} other {# 资产} }吗?",
         "unassign-assets-text": "确认后,所有选定的资产将被分配,客户无法访问。",
         "copyId": "复制资产ID",
         "idCopiedMessage": "资产ID已经复制到粘贴板",
@@ -252,7 +252,7 @@
         "key-required": "属性键必填。",
         "value": "值",
         "value-required": "属性值必填。",
-        "delete-attributes-title": "您确定要删除 { count, select, 1 {1 属性} other {# 属性} }吗?",
+        "delete-attributes-title": "您确定要删除 { count, plural, 1 {1 属性} other {# 属性} }吗?",
         "delete-attributes-text": "注意,确认后所有选中的属性都会被删除。",
         "delete-attributes": "删除属性",
         "enter-attribute-value": "输入属性值",
@@ -262,8 +262,8 @@
         "prev-widget": "上一个部件",
         "add-to-dashboard": "添加到仪表板",
         "add-widget-to-dashboard": "将部件添加到仪表板",
-        "selected-attributes": "{ count, select, 1 {1 属性} other {# 属性} } 被选中",
-        "selected-telemetry": "{ count, select, 1 {1 遥测} other {# 遥测} } 被选中"
+        "selected-attributes": "{ count, plural, 1 {1 属性} other {# 属性} } 被选中",
+        "selected-telemetry": "{ count, plural, 1 {1 遥测} other {# 遥测} } 被选中"
     },
     "audit-log": {
         "audit": "审计",
@@ -351,8 +351,8 @@
         "customer-details": "客户详情",
         "delete-customer-title": "您确定要删除客户'{{customerTitle}}'吗?",
         "delete-customer-text": "小心!确认后,客户及其所有相关数据将不可恢复。",
-        "delete-customers-title": "您确定要删除 { count, select, 1 {1 客户} other {# 客户} }吗?",
-        "delete-customers-action-title": "删除 { count, select, 1 {1 客户} other {# 客户} }",
+        "delete-customers-title": "您确定要删除 { count, plural, 1 {1 客户} other {# 客户} }吗?",
+        "delete-customers-action-title": "删除 { count, plural, 1 {1 客户} other {# 客户} }",
         "delete-customers-text": "小心!确认后,所有选定的客户将被删除,所有相关数据将不可恢复。",
         "manage-users": "管理用户",
         "manage-assets": "管理资产",
@@ -411,20 +411,20 @@
         "add-dashboard-text": "添加新的仪表板",
         "assign-dashboards": "分配仪表板",
         "assign-new-dashboard": "分配新的仪表板",
-        "assign-dashboards-text": "分配 { count, select, 1 {1 仪表板} other {# 仪表板} } 给客户",
-        "unassign-dashboards-action-text": "未分配 { count, select, 1 {1 仪表板} other {# 仪表板} } 给客户",
+        "assign-dashboards-text": "分配 { count, plural, 1 {1 仪表板} other {# 仪表板} } 给客户",
+        "unassign-dashboards-action-text": "未分配 { count, plural, 1 {1 仪表板} other {# 仪表板} } 给客户",
         "delete-dashboards": "删除仪表板",
         "unassign-dashboards": "取消分配仪表板",
-        "unassign-dashboards-action-title": "从客户处取消分配 { count, select, 1 {1 仪表板} other {# 仪表板} } ",
+        "unassign-dashboards-action-title": "从客户处取消分配 { count, plural, 1 {1 仪表板} other {# 仪表板} } ",
         "delete-dashboard-title": "您确定要删除仪表板 '{{dashboardTitle}}'吗?",
         "delete-dashboard-text": "小心!确认后仪表板及其所有相关数据将不可恢复。",
-        "delete-dashboards-title": "你确定你要删除 { count, select, 1 {1 仪表板} other {# 仪表板} }吗?",
-        "delete-dashboards-action-title": "删除 { count, select, 1 {1 仪表板} other {# 仪表板} }",
+        "delete-dashboards-title": "你确定你要删除 { count, plural, 1 {1 仪表板} other {# 仪表板} }吗?",
+        "delete-dashboards-action-title": "删除 { count, plural, 1 {1 仪表板} other {# 仪表板} }",
         "delete-dashboards-text": "小心!确认后所有选定的仪表板将被删除,所有相关数据将不可恢复。",
         "unassign-dashboard-title": "您确定要取消分配仪表板 '{{dashboardTitle}}'吗?",
         "unassign-dashboard-text": "确认后,面板将被取消分配,客户将无法访问。",
         "unassign-dashboard": "取消分配仪表板",
-        "unassign-dashboards-title": "您确定要取消分配仪表板 { count, select, 1 {1 仪表板} other {# 仪表板} } 吗?",
+        "unassign-dashboards-title": "您确定要取消分配仪表板 { count, plural, 1 {1 仪表板} other {# 仪表板} } 吗?",
         "unassign-dashboards-text": "确认后,所有选定的仪表板将被取消分配,客户将无法访问。",
         "public-dashboard-title": "仪表板现已公布",
         "public-dashboard-text": "你的仪表板 <b>{{dashboardTitle}}</b> 已被公开,可通过如下 <a href='{{publicLink}}' target='_blank'>链接</a>访问:",
@@ -500,7 +500,7 @@
         "manage-states": "仪表板状态管理",
         "states": "仪表板状态",
         "search-states": "仪表板状态检索",
-        "selected-states": "{ count, select, 1 {1 仪表板状态} other {# 仪表板状态} } 选中",
+        "selected-states": "{ count, plural, 1 {1 仪表板状态} other {# 仪表板状态} } 选中",
         "edit-state": "仪表板状态编辑",
         "delete-state": "删除仪表板状态",
         "add-state": "添加仪表板状态",
@@ -533,11 +533,11 @@
         "alarm": "报警字段",
         "timeseries-required": "需要设备时间序列。",
         "timeseries-or-attributes-required": "设备时间/属性必填。",
-        "maximum-timeseries-or-attributes": "最大允许 { count, select, 1 {1 时间序列/属性} other {# 时间序列/属性} }",
+        "maximum-timeseries-or-attributes": "最大允许 { count, plural, 1 {1 时间序列/属性} other {# 时间序列/属性} }",
         "alarm-fields-required": "警告字段必填。",
         "function-types": "函数类型",
         "function-types-required": "需要函数类型。",
-        "maximum-function-types": "至少需要 { count, select, 1 {1 函数类型} other {# 函数类型} }"
+        "maximum-function-types": "至少需要 { count, plural, 1 {1 函数类型} other {# 函数类型} }"
     },
     "datasource": {
         "type": "数据源类型",
@@ -694,47 +694,47 @@
         "type-required": "实体类型必填。",
         "type-device": "设备",
         "type-devices": "设备",
-        "list-of-devices": "{ count, select, 1 {设备} other {# 设备列表} }",
+        "list-of-devices": "{ count, plural, 1 {设备} other {# 设备列表} }",
         "device-name-starts-with": "以 '{{prefix}}' 开头的设备",
         "type-asset": "资产",
         "type-assets": "资产",
-        "list-of-assets": "{ count, select, 1 {资产} other {# 资产列表} }",
+        "list-of-assets": "{ count, plural, 1 {资产} other {# 资产列表} }",
         "asset-name-starts-with": "以 '{{prefix}}' 开头的资产",
         "type-rule": "规则",
         "type-rules": "规则",
-        "list-of-rules": "{ count, select, 1 {规则} other {# 规则列表} }",
+        "list-of-rules": "{ count, plural, 1 {规则} other {# 规则列表} }",
         "rule-name-starts-with": "以 '{{prefix}}' 开头的规则",
         "type-plugin": "插件",
         "type-plugins": "插件",
-        "list-of-plugins": "{ count, select, 1 {插件} other {# 插件列表} }",
+        "list-of-plugins": "{ count, plural, 1 {插件} other {# 插件列表} }",
         "plugin-name-starts-with": "以 '{{prefix}}' 开头的插件",
         "type-tenant": "租户",
         "type-tenants": "租户",
-        "list-of-tenants": "{ count, select, 1 {租户} other {# 租户列表} }",
+        "list-of-tenants": "{ count, plural, 1 {租户} other {# 租户列表} }",
         "tenant-name-starts-with": "以 '{{prefix}}' 开头的租户",
         "type-customer": "客户",
         "type-customers": "客户",
-        "list-of-customers": "{ count, select, 1 {客户} other {# 客户列表} }",
+        "list-of-customers": "{ count, plural, 1 {客户} other {# 客户列表} }",
         "customer-name-starts-with": "以 '{{prefix}}' 开头的客户",
         "type-user": "用户",
         "type-users": "用户",
-        "list-of-users": "{ count, select, 1 {用户} other {# 用户列表} }",
+        "list-of-users": "{ count, plural, 1 {用户} other {# 用户列表} }",
         "user-name-starts-with": "以 '{{prefix}}' 开头的用户",
         "type-dashboard": "仪表板",
         "type-dashboards": "仪表板",
-        "list-of-dashboards": "{ count, select, 1 {仪表板} other {# 仪表板列表} }",
+        "list-of-dashboards": "{ count, plural, 1 {仪表板} other {# 仪表板列表} }",
         "dashboard-name-starts-with": "以 '{{prefix}}' 开头的仪表板",
         "type-alarm": "警告",
         "type-alarms": "警告",
-        "list-of-alarms": "{ count, select, 1 {警告} other {# 警告列表} }",
+        "list-of-alarms": "{ count, plural, 1 {警告} other {# 警告列表} }",
         "alarm-name-starts-with": "以 '{{prefix}}' 开头的警告",
         "type-rulechain": "规则链",
         "type-rulechains": "规则链库",
-        "list-of-rulechains": "{ count, select, 1 {一个规则链} other {# 规则链列表} }",
+        "list-of-rulechains": "{ count, plural, 1 {一个规则链} other {# 规则链列表} }",
         "rulechain-name-starts-with": "规则链前缀名称 '{{prefix}}'",
         "type-current-customer": "当前客户",
         "search": "实体检索",
-        "selected-entities": "{ count, select, 1 {1 实体} other {# 实体} } 被选中",
+        "selected-entities": "{ count, plural, 1 {1 实体} other {# 实体} } 被选中",
         "entity-name": "实体名",
         "details": "实体详情",
         "no-entities-prompt": "没有找到实体",
@@ -771,7 +771,7 @@
     },
     "extension": {
         "extensions": "扩展",
-        "selected-extensions": "{ count, select, 1 {1 扩展} 其它 {# 扩展} } 被选择",
+        "selected-extensions": "{ count, plural, 1 {1 扩展} 其它 {# 扩展} } 被选择",
         "type": "类型",
         "key": "健名",
         "value": "值",
@@ -785,7 +785,7 @@
         "edit": "编辑扩展",
         "delete-extension-title": "确实要删除扩展名'{{extensionId}}'吗?",
         "delete-extension-text": "小心,确认后,扩展和所有相关数据将变得不可恢复。",
-        "delete-extensions-title": "您确定要删除 { count, select, 1 {1 表达式} 其它 {# 表达式} }吗?",
+        "delete-extensions-title": "您确定要删除 { count, plural, 1 {1 表达式} 其它 {# 表达式} }吗?",
         "delete-extensions-text": "小心,确认后,所有选定的扩展将被删除。",
         "converters": "转换器",
         "converter-id": "转换器序号",
@@ -937,8 +937,8 @@
     "grid": {
         "delete-item-title": "您确定要删除此项吗?",
         "delete-item-text": "注意,确认后此项及其所有相关数据将变得不可恢复。",
-        "delete-items-title": "你确定你要删除 { count, select, 1 {1 项} other {# 项} }吗?",
-        "delete-items-action-title": "删除 { count, select, 1 {1 项} other {# 项} }",
+        "delete-items-title": "你确定你要删除 { count, plural, 1 {1 项} other {# 项} }吗?",
+        "delete-items-action-title": "删除 { count, plural, 1 {1 项} other {# 项} }",
         "delete-items-text": "注意,确认后所有选择的项目将被删除,所有相关数据将不可恢复。",
         "add-item-text": "添加新项目",
         "no-items-text": "没有找到项目",
@@ -1039,7 +1039,7 @@
         },
         "from-relations": "向外的关联",
         "to-relations": "向内的关联",
-        "selected-relations": "{ count, select, 1 {1 关联} other {# 关联} } 被选中",
+        "selected-relations": "{ count, plural, 1 {1 关联} other {# 关联} } 被选中",
         "type": "类型",
         "to-entity-type": "到实体类型",
         "to-entity-name": "到实体名称",
@@ -1055,11 +1055,11 @@
         "edit": "编辑关联",
         "delete-to-relation-title": "确定要删除实体 '{{entityName}}' 的关联吗?",
         "delete-to-relation-text": "确定删除后实体 '{{entityName}}' 将取消与当前实体的关联关系。",
-        "delete-to-relations-title": "确定要删除 { count, select, 1 {1 关联} other {# 关联} }?",
+        "delete-to-relations-title": "确定要删除 { count, plural, 1 {1 关联} other {# 关联} }?",
         "delete-to-relations-text": "确定删除所有选择的关联关系后,与当前实体对应的所有关联关系将被移除。",
         "delete-from-relation-title": "确定要从实体 '{{entityName}}' 删除关联吗?",
         "delete-from-relation-text": "确定删除后,当前实体将与实体 '{{entityName}}' 取消关联",
-        "delete-from-relations-title": "确定删除 { count, select, 1 {1 关联} other {# 关联} } 吗?",
+        "delete-from-relations-title": "确定删除 { count, plural, 1 {1 关联} other {# 关联} } 吗?",
         "delete-from-relations-text": "确定删除所有选择的关联关系后,当前实体将与对应的实体取消关联",
         "remove-relation-filter": "移除关联过滤器",
         "add-relation-filter": "添加关联过滤器",
@@ -1086,8 +1086,8 @@
         "set-root-rulechain-text": "确认之后,规则链将变为根规格链,并将处理所有传入的传输消息。",
         "delete-rulechain-title": " 确实要删除规则链'{{ruleChainName}}'吗?",
         "delete-rulechain-text": "小心,在确认规则链和所有相关数据将变得不可恢复。",
-        "delete-rulechains-title": "确实要删除{count, select, 1 { 1 规则链}其他{# 规则链库}}吗?",
-        "delete-rulechains-action-title": "删除 { count, select, 1 {1 规则链} other {# 规则链库} }",
+        "delete-rulechains-title": "确实要删除{count, plural, 1 { 1 规则链}其他{# 规则链库}}吗?",
+        "delete-rulechains-action-title": "删除 { count, plural, 1 {1 规则链} other {# 规则链库} }",
         "delete-rulechains-text": "小心,确认后,所有选定的规则链将被删除,所有相关的数据将变得不可恢复。",
         "add-rulechain-text": "添加新的规则链",
         "no-rulechains-text": "规则链没有发现",
@@ -1178,7 +1178,7 @@
         "delete-tenant-title": "您确定要删除租户'{{tenantTitle}}'吗?",
         "delete-tenant-text": "小心!确认后,租户和所有相关数据将不可恢复。",
         "delete-tenants-title": "您确定要删除 {count,select,1 {1 租户} other {# 租户}} 吗?",
-        "delete-tenants-action-title": "删除 { count, select, 1 {1 租户} other {# 租户} }",
+        "delete-tenants-action-title": "删除 { count, plural, 1 {1 租户} other {# 租户} }",
         "delete-tenants-text": "小心!确认后,所有选定的租户将被删除,所有相关数据将不可恢复。",
         "title": "标题",
         "title-required": "标题必填。",
@@ -1192,10 +1192,10 @@
         "tenant-required": "租户必填"
     },
     "timeinterval": {
-        "seconds-interval": "{ seconds, select, 1 {1 秒} other {# 秒} }",
-        "minutes-interval": "{ minutes, select, 1 {1 分} other {# 分} }",
-        "hours-interval": "{ hours, select, 1 {1 小时} other {# 小时} }",
-        "days-interval": "{ days, select, 1 {1 天} other {# 天} }",
+        "seconds-interval": "{ seconds, plural, 1 {1 秒} other {# 秒} }",
+        "minutes-interval": "{ minutes, plural, 1 {1 分} other {# 分} }",
+        "hours-interval": "{ hours, plural, 1 {1 小时} other {# 小时} }",
+        "days-interval": "{ days, plural, 1 {1 天} other {# 天} }",
         "days": "天",
         "hours": "时",
         "minutes": "分",
@@ -1203,10 +1203,10 @@
         "advanced": "高级"
     },
     "timewindow": {
-        "days": "{ days, select, 1 { 天 } other {# 天 } }",
-        "hours": "{ hours, select, 0 { 小时 } 1 {1 小时 } other {# 小时 } }",
-        "minutes": "{ minutes, select, 0 { 分 } 1 {1 分 } other {# 分 } }",
-        "seconds": "{ seconds, select, 0 { 秒 } 1 {1 秒 } other {# 秒 } }",
+        "days": "{ days, plural, 1 { 天 } other {# 天 } }",
+        "hours": "{ hours, plural, 0 { 小时 } 1 {1 小时 } other {# 小时 } }",
+        "minutes": "{ minutes, plural, 0 { 分 } 1 {1 分 } other {# 分 } }",
+        "seconds": "{ seconds, plural, 0 { 秒 } 1 {1 秒 } other {# 秒 } }",
         "realtime": "实时",
         "history": "历史",
         "last-prefix": "最后",
@@ -1232,8 +1232,8 @@
         "user-details": "用户详细信息",
         "delete-user-title": "您确定要删除用户 '{{userEmail}}' 吗?",
         "delete-user-text": "小心!确认后,用户和所有相关数据将不可恢复。",
-        "delete-users-title": "你确定你要删除 { count, select, 1 {1 用户} other {# 用户} } 吗?",
-        "delete-users-action-title": "删除  { count, select, 1 {1 用户} other {# 用户} }",
+        "delete-users-title": "你确定你要删除 { count, plural, 1 {1 用户} other {# 用户} } 吗?",
+        "delete-users-action-title": "删除  { count, plural, 1 {1 用户} other {# 用户} }",
         "delete-users-text": "小心!确认后,所有选定的用户将被删除,所有相关数据将不可恢复。",
         "activation-email-sent-message": "激活电子邮件已成功发送!",
         "resend-activation": "重新发送激活",
@@ -1351,8 +1351,8 @@
         "widgets-bundle-details": "部件包详细信息",
         "delete-widgets-bundle-title": "您确定要删除部件包 '{{widgetsBundleTitle}}'吗?",
         "delete-widgets-bundle-text": "小心!确认后,部件包和所有相关数据将不可恢复。",
-        "delete-widgets-bundles-title": "你确定你要删除 { count, select, 1 {1 部件包} other {# 部件包} } 吗?",
-        "delete-widgets-bundles-action-title": "删除  { count, select, 1 {1 部件包} other {# 部件包} }",
+        "delete-widgets-bundles-title": "你确定你要删除 { count, plural, 1 {1 部件包} other {# 部件包} } 吗?",
+        "delete-widgets-bundles-action-title": "删除  { count, plural, 1 {1 部件包} other {# 部件包} }",
         "delete-widgets-bundles-text": "小心!确认后,所有选定的部件包将被删除,所有相关数据将不可恢复。",
         "no-widgets-bundles-matching": "没有找到与 '{{widgetsBundle}}' 匹配的部件包。",
         "widgets-bundle-required": "需要部件包。",
@@ -1388,7 +1388,7 @@
         "use-dashboard-timewindow": "使用仪表板的时间窗口",
         "display-legend": "显示图例",
         "datasources": "数据源",
-        "maximum-datasources": "最大允许 { count, select, 1 {1 数据} other {# 数据} }",
+        "maximum-datasources": "最大允许 { count, plural, 1 {1 数据} other {# 数据} }",
         "datasource-type": "类型",
         "datasource-parameters": "参数",
         "remove-datasource": "移除数据源",