From a26dfec6faaffb77bb08ad0543d199f4cbab86d4 Mon Sep 17 00:00:00 2001 From: viktor Date: Tue, 12 May 2020 13:17:56 +0300 Subject: [PATCH 01/14] start tb-postgres with 'thingsboard' user --- msa/tb/docker-postgres/Dockerfile | 22 ++++++++++++++++++---- msa/tb/docker-postgres/start-db.sh | 9 ++++----- msa/tb/docker-postgres/stop-db.sh | 4 ++-- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/msa/tb/docker-postgres/Dockerfile b/msa/tb/docker-postgres/Dockerfile index a2a24442e4..6050d0822b 100644 --- a/msa/tb/docker-postgres/Dockerfile +++ b/msa/tb/docker-postgres/Dockerfile @@ -20,13 +20,11 @@ RUN apt-get update RUN apt-get install -y curl RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main' | tee --append /etc/apt/sources.list.d/pgdg.list > /dev/null RUN curl -L https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - +ENV PG_MAJOR 11 RUN apt-get update RUN apt-get install -y postgresql-11 RUN update-rc.d postgresql disable -RUN mkdir -p /var/log/postgres -RUN chown -R postgres:postgres /var/log/postgres - COPY logback.xml ${pkg.name}.conf start-db.sh stop-db.sh start-tb.sh upgrade-tb.sh install-tb.sh ${pkg.name}.deb /tmp/ RUN chmod a+x /tmp/*.sh \ @@ -50,13 +48,29 @@ ENV DATABASE_TS_TYPE=sql ENV DATABASE_ENTITIES_TYPE=sql ENV PGDATA=/data/db +ENV PATH=$PATH:/usr/lib/postgresql/$PG_MAJOR/bin ENV SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.PostgreSQLDialect ENV SPRING_DRIVER_CLASS_NAME=org.postgresql.Driver ENV SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/thingsboard -ENV SPRING_DATASOURCE_USERNAME=postgres +ENV SPRING_DATASOURCE_USERNAME=${pkg.user} ENV SPRING_DATASOURCE_PASSWORD=postgres + +ENV PGLOG=/var/log/postgres +RUN mkdir -p $PGLOG +RUN chown -R ${pkg.user}:${pkg.user} $PGLOG + +RUN chown -R ${pkg.user}:${pkg.user} /var/run/postgresql + +RUN mkdir -p /data +RUN chown -R ${pkg.user}:${pkg.user} /data + +RUN chown -R ${pkg.user}:${pkg.user} /var/log/${pkg.name} +RUN chmod 555 ${pkg.installFolder}/bin/${pkg.name}.jar + +USER ${pkg.user} + EXPOSE 9090 EXPOSE 1883 EXPOSE 5683/udp diff --git a/msa/tb/docker-postgres/start-db.sh b/msa/tb/docker-postgres/start-db.sh index dfbfc1dd68..6119daf2f9 100644 --- a/msa/tb/docker-postgres/start-db.sh +++ b/msa/tb/docker-postgres/start-db.sh @@ -17,16 +17,15 @@ firstlaunch=${DATA_FOLDER}/.firstlaunch -export PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl) +PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl) if [ ! -d ${PGDATA} ]; then mkdir -p ${PGDATA} - chown -R postgres:postgres ${PGDATA} - su postgres -c '${PG_CTL} initdb -U postgres' + ${PG_CTL} initdb fi -su postgres -c '${PG_CTL} -l /var/log/postgres/postgres.log -w start' +exec setsid nohup postgres >> ${PGLOG}/postgres.log 2>&1 & if [ ! -f ${firstlaunch} ]; then - su postgres -c 'psql -U postgres -d postgres -c "CREATE DATABASE thingsboard"' + psql -U ${pkg.user} -d postgres -c "CREATE DATABASE thingsboard" fi diff --git a/msa/tb/docker-postgres/stop-db.sh b/msa/tb/docker-postgres/stop-db.sh index 66596d13c8..b3d151dd16 100644 --- a/msa/tb/docker-postgres/stop-db.sh +++ b/msa/tb/docker-postgres/stop-db.sh @@ -15,6 +15,6 @@ # limitations under the License. # -export PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl) +PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl) -su postgres -c '${PG_CTL} stop' +${PG_CTL} stop From 3dacb296fc00c012a06ad75a2c64ceac04d170d3 Mon Sep 17 00:00:00 2001 From: viktor Date: Tue, 12 May 2020 16:18:30 +0300 Subject: [PATCH 02/14] start tb-cassandra with 'cassandra' user --- msa/tb/docker-cassandra/Dockerfile | 15 +++++++++++++++ msa/tb/docker-cassandra/start-db.sh | 4 ---- msa/tb/docker-cassandra/stop-db.sh | 12 +++++++++++- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/msa/tb/docker-cassandra/Dockerfile b/msa/tb/docker-cassandra/Dockerfile index 3a761398fd..7a2b86b831 100644 --- a/msa/tb/docker-cassandra/Dockerfile +++ b/msa/tb/docker-cassandra/Dockerfile @@ -49,6 +49,21 @@ ENV DATABASE_ENTITIES_TYPE=cassandra ENV CASSANDRA_HOST=localhost ENV CASSANDRA_PORT=9042 +ENV CASSANDRA_HOME=/opt/cassandra +ENV PATH $CASSANDRA_HOME/bin:$PATH + +RUN rm -rf /var/lib/cassandra + +RUN chmod a+w /var/lib + +RUN mkdir -p $DATA_FOLDER +RUN chown -R cassandra:cassandra /data + +RUN chown -R cassandra:cassandra /var/log/${pkg.name} +RUN chmod 555 ${pkg.installFolder}/bin/${pkg.name}.jar + + +USER cassandra EXPOSE 9090 EXPOSE 1883 diff --git a/msa/tb/docker-cassandra/start-db.sh b/msa/tb/docker-cassandra/start-db.sh index d65edf71b1..5197fb02d3 100644 --- a/msa/tb/docker-cassandra/start-db.sh +++ b/msa/tb/docker-cassandra/start-db.sh @@ -19,12 +19,8 @@ cassandra_data_dir=${DATA_FOLDER}/db cassandra_data_link=/var/lib/cassandra if [ ! -L ${cassandra_data_link} ]; then - if [ -d ${cassandra_data_link} ]; then - rm -rf ${cassandra_data_link} - fi if [ ! -d ${cassandra_data_dir} ]; then mkdir -p ${cassandra_data_dir} - chown -R cassandra:cassandra ${cassandra_data_dir} fi ln -s ${cassandra_data_dir} ${cassandra_data_link} fi diff --git a/msa/tb/docker-cassandra/stop-db.sh b/msa/tb/docker-cassandra/stop-db.sh index 24cf570999..bca71375fc 100644 --- a/msa/tb/docker-cassandra/stop-db.sh +++ b/msa/tb/docker-cassandra/stop-db.sh @@ -15,4 +15,14 @@ # limitations under the License. # -service cassandra stop +CASSANDRA_PID=$(ps aux | grep '[c]assandra' | awk '{print $2}') + +echo "Stopping cassandra (pid ${CASSANDRA_PID})." +kill -SIGTERM ${CASSANDRA_PID} + +while [ -e /proc/${CASSANDRA_PID} ] +do + echo "Waiting for cassandra to stop." + sleep 2 +done +echo "Cassandra was stopped." \ No newline at end of file From f129e9549ec2e65ebb2fa76d94a68509d99c724c Mon Sep 17 00:00:00 2001 From: viktor Date: Wed, 13 May 2020 11:05:50 +0300 Subject: [PATCH 03/14] start tb with 'thingsboard' user --- msa/tb/docker-tb/Dockerfile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/msa/tb/docker-tb/Dockerfile b/msa/tb/docker-tb/Dockerfile index 3f9b26bec4..d7b9383852 100644 --- a/msa/tb/docker-tb/Dockerfile +++ b/msa/tb/docker-tb/Dockerfile @@ -44,6 +44,13 @@ ENV SPRING_DATASOURCE_URL=jdbc:hsqldb:file:/data/db/thingsboardDb;sql.enforce_si ENV SPRING_DATASOURCE_USERNAME=sa ENV SPRING_DATASOURCE_PASSWORD= +RUN mkdir -p /data +RUN chown -R ${pkg.user}:${pkg.user} /data + +RUN chmod 555 ${pkg.installFolder}/bin/${pkg.name}.jar + +USER ${pkg.user} + EXPOSE 9090 EXPOSE 1883 EXPOSE 5683/udp From 7c3eee66dbbf2b4d7f579b88a8d4e8b3e58087c0 Mon Sep 17 00:00:00 2001 From: viktor Date: Wed, 13 May 2020 13:54:10 +0300 Subject: [PATCH 04/14] start tb-cassandra with 'thingsboard' user (with postgresql server) --- msa/tb/docker-cassandra/Dockerfile | 30 +++++++++++++++++++---------- msa/tb/docker-cassandra/start-db.sh | 11 +++++------ msa/tb/docker-cassandra/stop-db.sh | 4 ++++ 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/msa/tb/docker-cassandra/Dockerfile b/msa/tb/docker-cassandra/Dockerfile index 25cc65740b..6e32af945a 100644 --- a/msa/tb/docker-cassandra/Dockerfile +++ b/msa/tb/docker-cassandra/Dockerfile @@ -22,15 +22,13 @@ RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main' | tee RUN curl -L https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - RUN echo 'deb http://www.apache.org/dist/cassandra/debian 311x main' | tee --append /etc/apt/sources.list.d/cassandra.list > /dev/null RUN curl -L https://www.apache.org/dist/cassandra/KEYS | apt-key add - +ENV PG_MAJOR=11 RUN apt-get update RUN apt-get install -y cassandra cassandra-tools postgresql-11 RUN update-rc.d cassandra disable RUN update-rc.d postgresql disable RUN sed -i.old '/ulimit/d' /etc/init.d/cassandra -RUN mkdir -p /var/log/postgres -RUN chown -R postgres:postgres /var/log/postgres - COPY logback.xml ${pkg.name}.conf start-db.sh stop-db.sh start-tb.sh upgrade-tb.sh install-tb.sh ${pkg.name}.deb /tmp/ RUN chmod a+x /tmp/*.sh \ @@ -58,26 +56,38 @@ ENV CASSANDRA_DATA=/data/cassandra ENV SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.PostgreSQLDialect ENV SPRING_DRIVER_CLASS_NAME=org.postgresql.Driver ENV SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/thingsboard -ENV SPRING_DATASOURCE_USERNAME=postgres +ENV SPRING_DATASOURCE_USERNAME=${pkg.user} ENV SPRING_DATASOURCE_PASSWORD=postgres ENV CASSANDRA_HOST=localhost ENV CASSANDRA_PORT=9042 ENV CASSANDRA_HOME=/opt/cassandra -ENV PATH $CASSANDRA_HOME/bin:$PATH +ENV PATH=$CASSANDRA_HOME/bin:$PATH +ENV PATH=$PATH:/usr/lib/postgresql/$PG_MAJOR/bin + +ENV PGLOG=/var/log/postgres +ENV CASSANDRA_LOG=/var/log/cassandra + +# postgres config +RUN mkdir -p $PGLOG +RUN chown -R ${pkg.user}:${pkg.user} $PGLOG +RUN chown -R ${pkg.user}:${pkg.user} /var/log/postgresql +RUN chown -R ${pkg.user}:${pkg.user} /var/run/postgresql + +# cassandra config RUN rm -rf /var/lib/cassandra - RUN chmod a+w /var/lib +RUN chown -R ${pkg.user}:${pkg.user} $CASSANDRA_LOG + RUN mkdir -p $DATA_FOLDER -RUN chown -R cassandra:cassandra /data +RUN chown -R ${pkg.user}:${pkg.user} $DATA_FOLDER +RUN chown -R ${pkg.user}:${pkg.user} /var/log/${pkg.name} -RUN chown -R cassandra:cassandra /var/log/${pkg.name} RUN chmod 555 ${pkg.installFolder}/bin/${pkg.name}.jar - -USER cassandra +USER ${pkg.user} EXPOSE 9090 EXPOSE 1883 diff --git a/msa/tb/docker-cassandra/start-db.sh b/msa/tb/docker-cassandra/start-db.sh index 49c766c738..fa80f6db57 100644 --- a/msa/tb/docker-cassandra/start-db.sh +++ b/msa/tb/docker-cassandra/start-db.sh @@ -17,18 +17,17 @@ firstlaunch=${DATA_FOLDER}/.firstlaunch -export PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl) +PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl) if [ ! -d ${PGDATA} ]; then mkdir -p ${PGDATA} - chown -R postgres:postgres ${PGDATA} - su postgres -c '${PG_CTL} initdb -U postgres' + ${PG_CTL} initdb fi -su postgres -c '${PG_CTL} -l /var/log/postgres/postgres.log -w start' +exec setsid nohup postgres >> ${PGLOG}/postgres.log 2>&1 & if [ ! -f ${firstlaunch} ]; then - su postgres -c 'psql -U postgres -d postgres -c "CREATE DATABASE thingsboard"' + psql -U ${pkg.user} -d postgres -c "CREATE DATABASE thingsboard" fi cassandra_data_dir=${CASSANDRA_DATA} @@ -41,7 +40,7 @@ if [ ! -L ${cassandra_data_link} ]; then ln -s ${cassandra_data_dir} ${cassandra_data_link} fi -service cassandra start +exec setsid nohup cassandra >> ${CASSANDRA_LOG}/cassandra.log 2>&1 & until nmap $CASSANDRA_HOST -p $CASSANDRA_PORT | grep "$CASSANDRA_PORT/tcp open" do diff --git a/msa/tb/docker-cassandra/stop-db.sh b/msa/tb/docker-cassandra/stop-db.sh index a1e8f7cd3a..43630fc1d3 100644 --- a/msa/tb/docker-cassandra/stop-db.sh +++ b/msa/tb/docker-cassandra/stop-db.sh @@ -20,6 +20,10 @@ CASSANDRA_PID=$(ps aux | grep '[c]assandra' | awk '{print $2}') echo "Stopping cassandra (pid ${CASSANDRA_PID})." kill -SIGTERM ${CASSANDRA_PID} +PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl) +echo "Stopping postgres." +${PG_CTL} stop + while [ -e /proc/${CASSANDRA_PID} ] do echo "Waiting for cassandra to stop." From 5f8bc972210b4228d911ff464428cd7e38bb88f6 Mon Sep 17 00:00:00 2001 From: YevhenBondarenko Date: Wed, 10 Jun 2020 18:20:32 +0300 Subject: [PATCH 05/14] Changed Jenkins repo url scheme to https --- application/pom.xml | 2 +- msa/js-executor/pom.xml | 2 +- msa/tb-node/pom.xml | 2 +- msa/tb/pom.xml | 2 +- msa/transport/coap/pom.xml | 2 +- msa/transport/http/pom.xml | 2 +- msa/transport/mqtt/pom.xml | 2 +- msa/web-ui/pom.xml | 2 +- transport/coap/pom.xml | 2 +- transport/http/pom.xml | 2 +- transport/mqtt/pom.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/application/pom.xml b/application/pom.xml index e964f94373..2fe3529914 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -373,7 +373,7 @@ jenkins Jenkins Repository - http://repo.jenkins-ci.org/releases + https://repo.jenkins-ci.org/releases false diff --git a/msa/js-executor/pom.xml b/msa/js-executor/pom.xml index a3d0bb77cc..7ded6cfad3 100644 --- a/msa/js-executor/pom.xml +++ b/msa/js-executor/pom.xml @@ -215,7 +215,7 @@ jenkins Jenkins Repository - http://repo.jenkins-ci.org/releases + https://repo.jenkins-ci.org/releases false diff --git a/msa/tb-node/pom.xml b/msa/tb-node/pom.xml index 10a3c9533b..e8b83da1a7 100644 --- a/msa/tb-node/pom.xml +++ b/msa/tb-node/pom.xml @@ -180,7 +180,7 @@ jenkins Jenkins Repository - http://repo.jenkins-ci.org/releases + https://repo.jenkins-ci.org/releases false diff --git a/msa/tb/pom.xml b/msa/tb/pom.xml index 8dcbaebec2..842d8e1c8d 100644 --- a/msa/tb/pom.xml +++ b/msa/tb/pom.xml @@ -360,7 +360,7 @@ jenkins Jenkins Repository - http://repo.jenkins-ci.org/releases + https://repo.jenkins-ci.org/releases false diff --git a/msa/transport/coap/pom.xml b/msa/transport/coap/pom.xml index efcf2f8723..83fd179256 100644 --- a/msa/transport/coap/pom.xml +++ b/msa/transport/coap/pom.xml @@ -180,7 +180,7 @@ jenkins Jenkins Repository - http://repo.jenkins-ci.org/releases + https://repo.jenkins-ci.org/releases false diff --git a/msa/transport/http/pom.xml b/msa/transport/http/pom.xml index 7b6a5bda10..810ffa73ae 100644 --- a/msa/transport/http/pom.xml +++ b/msa/transport/http/pom.xml @@ -180,7 +180,7 @@ jenkins Jenkins Repository - http://repo.jenkins-ci.org/releases + https://repo.jenkins-ci.org/releases false diff --git a/msa/transport/mqtt/pom.xml b/msa/transport/mqtt/pom.xml index e113402b77..fd788bea11 100644 --- a/msa/transport/mqtt/pom.xml +++ b/msa/transport/mqtt/pom.xml @@ -180,7 +180,7 @@ jenkins Jenkins Repository - http://repo.jenkins-ci.org/releases + https://repo.jenkins-ci.org/releases false diff --git a/msa/web-ui/pom.xml b/msa/web-ui/pom.xml index e12e26c551..282a8ab97b 100644 --- a/msa/web-ui/pom.xml +++ b/msa/web-ui/pom.xml @@ -432,7 +432,7 @@ jenkins Jenkins Repository - http://repo.jenkins-ci.org/releases + https://repo.jenkins-ci.org/releases false diff --git a/transport/coap/pom.xml b/transport/coap/pom.xml index 776a4d938d..03d67c8e9c 100644 --- a/transport/coap/pom.xml +++ b/transport/coap/pom.xml @@ -123,7 +123,7 @@ jenkins Jenkins Repository - http://repo.jenkins-ci.org/releases + https://repo.jenkins-ci.org/releases false diff --git a/transport/http/pom.xml b/transport/http/pom.xml index f769f0185e..903e4f92a0 100644 --- a/transport/http/pom.xml +++ b/transport/http/pom.xml @@ -123,7 +123,7 @@ jenkins Jenkins Repository - http://repo.jenkins-ci.org/releases + https://repo.jenkins-ci.org/releases false diff --git a/transport/mqtt/pom.xml b/transport/mqtt/pom.xml index 4975694c34..c245f8f3a8 100644 --- a/transport/mqtt/pom.xml +++ b/transport/mqtt/pom.xml @@ -123,7 +123,7 @@ jenkins Jenkins Repository - http://repo.jenkins-ci.org/releases + https://repo.jenkins-ci.org/releases false From 75fe3b31e7180c55f465400a8750d7b774547df7 Mon Sep 17 00:00:00 2001 From: Andrii Shvaika Date: Thu, 11 Jun 2020 14:25:32 +0300 Subject: [PATCH 06/14] Hotfix of upgrade script. --- .../service/install/CassandraTsDatabaseUpgradeService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/application/src/main/java/org/thingsboard/server/service/install/CassandraTsDatabaseUpgradeService.java b/application/src/main/java/org/thingsboard/server/service/install/CassandraTsDatabaseUpgradeService.java index 96bf414240..58180583ef 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/CassandraTsDatabaseUpgradeService.java +++ b/application/src/main/java/org/thingsboard/server/service/install/CassandraTsDatabaseUpgradeService.java @@ -48,6 +48,8 @@ public class CassandraTsDatabaseUpgradeService extends AbstractCassandraDatabase } log.info("Schema updated."); break; + case "2.5.0": + break; default: throw new RuntimeException("Unable to upgrade Cassandra database, unsupported fromVersion: " + fromVersion); } From 4a8f5f0052862b6b8c7b834b468769360778d4da Mon Sep 17 00:00:00 2001 From: vzikratyi Date: Mon, 15 Jun 2020 18:09:31 +0300 Subject: [PATCH 07/14] Added instruction for running single Docker containers without root access --- msa/tb/README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/msa/tb/README.md b/msa/tb/README.md index 14b93fcd28..d9389b1276 100644 --- a/msa/tb/README.md +++ b/msa/tb/README.md @@ -8,6 +8,15 @@ This project provides the build for the ThingsBoard single docker images. ## Running +Before starting Docker container run following command to create a directory for storing data and change its owner to docker container user. +To be able to change user, **chown** command is used, which requires sudo permissions (command will request password for a sudo access): + +` +$ mkdir -p ~/.mytb-data && sudo chown -R 799:799 ~/.mytb-data +` + +**NOTE**: replace directory `~/.mytb-data` with directory you're planning to use on container creation. + In this example `thingsboard/tb` image will be used. You can choose any other images with different databases (see above). Execute the following command to run this docker directly: From 4a798ceaf41e1219bda0a42d4691cf2abb25f9c9 Mon Sep 17 00:00:00 2001 From: vzikratyi Date: Mon, 15 Jun 2020 18:53:52 +0300 Subject: [PATCH 08/14] Dummy commit to rerun TeamCity --- msa/tb/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msa/tb/README.md b/msa/tb/README.md index d9389b1276..cffca5ceb7 100644 --- a/msa/tb/README.md +++ b/msa/tb/README.md @@ -13,7 +13,7 @@ To be able to change user, **chown** command is used, which requires sudo permis ` $ mkdir -p ~/.mytb-data && sudo chown -R 799:799 ~/.mytb-data -` +` **NOTE**: replace directory `~/.mytb-data` with directory you're planning to use on container creation. From 946881b0c0ff98fbf46dbc85180de49889df567e Mon Sep 17 00:00:00 2001 From: blackstar-baba <535650957@qq.com> Date: Fri, 19 Jun 2020 10:22:14 +0800 Subject: [PATCH 09/14] close the stream after generateCertificate close the stream after generateCertificate --- .../engine/mqtt/credentials/CertPemClientCredentials.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/mqtt/credentials/CertPemClientCredentials.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/mqtt/credentials/CertPemClientCredentials.java index 60895fa002..da964d3443 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/mqtt/credentials/CertPemClientCredentials.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/mqtt/credentials/CertPemClientCredentials.java @@ -38,6 +38,7 @@ import javax.crypto.spec.PBEKeySpec; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.TrustManagerFactory; import java.io.ByteArrayInputStream; +import java.io.InputStream; import java.security.AlgorithmParameters; import java.security.Key; import java.security.KeyFactory; @@ -142,7 +143,9 @@ public class CertPemClientCredentials implements MqttClientCredentials { .replaceAll("\\s", ""); byte[] decoded = Base64.decodeBase64(fileContent); CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); - certificate = (X509Certificate) certFactory.generateCertificate(new ByteArrayInputStream(decoded)); + try (InputStream inStream = new ByteArrayInputStream(decoded)) { + certificate = (X509Certificate) certFactory.generateCertificate(inStream); + } } return certificate; } From cc9e01e2089d527e18c654ccf2600d64cca6a4f6 Mon Sep 17 00:00:00 2001 From: Vladyslav_Prykhodko Date: Thu, 25 Jun 2020 23:16:53 +0300 Subject: [PATCH 10/14] Add Georgian language --- .../assets/locale/locale.constant-en_US.json | 3 +- .../assets/locale/locale.constant-ka_GE.json | 1814 +++++++++++++++++ 2 files changed, 1816 insertions(+), 1 deletion(-) create mode 100644 ui-ngx/src/assets/locale/locale.constant-ka_GE.json diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index 0d4925d89f..1003120437 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -1955,7 +1955,8 @@ "cs_CZ": "Česky", "el_GR": "Ελληνικά", "ro_RO": "Română", - "lv_LV": "Latviešu" + "lv_LV": "Latviešu", + "ka_GE": "ქართული" } } } diff --git a/ui-ngx/src/assets/locale/locale.constant-ka_GE.json b/ui-ngx/src/assets/locale/locale.constant-ka_GE.json new file mode 100644 index 0000000000..d9713d3419 --- /dev/null +++ b/ui-ngx/src/assets/locale/locale.constant-ka_GE.json @@ -0,0 +1,1814 @@ +{ + "access": { + "unauthorized": "არა ავტორიზირებული", + "unauthorized-access": "უნებართვო წვდომა", + "unauthorized-access-text": "უნებართვო წვდომის ტექსტი", + "access-forbidden": "შესვლა აკრძალულია", + "access-forbidden-text": "თქვენ არ გაქვთ ამ რესურსზე წვდომის უფლებები!
წვდომის მისაღებად, შეეცადეთ შეხვიდეთ როგორც სხვა მომხმარებელი.", + "refresh-token-expired": "სესია ამოიწურა", + "refresh-token-failed": "სესიის განახლება ვერ მოხერხდა", + "permission-denied": "წვდომა აკრძალულია", + "permission-denied-text": "თქვენ არ გაქვთ უფლება შეასრულოთ აღნიშნული ოპერაცია" + }, + "action": { + "activate": "გააქტიურება", + "suspend": "შეაჩერე", + "save": "შენახვა", + "saveAs": "შეინახე როგორც", + "cancel": "გაუქმება", + "ok": "კარგი", + "delete": "წაშლა", + "add": "დამატება", + "yes": "დიახ", + "no": "არა", + "update": "განახლება", + "remove": "წაშლა", + "select": "შერჩევა", + "search": "ძებნა", + "clear-search": "გასუფთავება", + "assign": "მინიჭება", + "unassign": "მოხსნა", + "share": "გაზიარება", + "make-private": "გახადე პრივატული", + "apply": "დამახსოვრება", + "apply-changes": "ცვლილების დამახსოვრება", + "edit-mode": "რედაქტირების რეჟიმში", + "enter-edit-mode": "რედაქტირების რეჟიმში შესვლა", + "decline-changes": "ცვლილებების გაუქმება", + "close": "დახურვა", + "back": "უკან", + "run": "გაშვება", + "sign-in": "შესვლა", + "edit": "რედაქტირება", + "view": "ხედი", + "create": "შექმნა", + "drag": "გადაათრიეთ", + "refresh": "განახლება", + "undo": "დაბრუნება", + "copy": "კოპირება", + "paste": "ჩასმა", + "copy-reference": "მისმართის კომპირება", + "paste-reference": "მისამართის ჩასმა", + "import": "იმპორტი", + "export": "ექსპორტი", + "share-via": "გაზიარება როგორც {{provider}}", + "continue": "გაგრძელება", + "discard-changes": "ცვლილებების გაუქმება" + }, + "aggregation": { + "aggregation": "აგრეგაცია", + "function": "ფუნქცია", + "limit": "ზღვარი", + "group-interval": "ჯგუფური ინტერვალი", + "min": "წთ", + "max": "მაქ", + "avg": "საშუალო", + "sum": "ჯამი", + "count": "რაოდენობა", + "none": "არცერთი" + }, + "admin": { + "general": "ზოგადი", + "general-settings": "ძირითადი პარამეტრები", + "outgoing-mail": "გამავალი მეილი", + "outgoing-mail-settings": "გამავალი ფოსტის-პარამეტრები", + "system-settings": "სისტემის პარამეტრები", + "test-mail-sent": "სატესტო მეილი გაგზავნილია", + "base-url": "ბაზა-url", + "base-url-required": "ბაზა-url-აუცილებელია", + "mail-from": "გამგზავნი", + "mail-from-required": "გამგზავნის ველი აუცილებელია", + "smtp-protocol": "smtp- პროტოკოლი", + "smtp-host": "smtp- ჰოსთი", + "smtp-host-required": "smtp- ჰოსთი აუციელებელია", + "smtp-port": "smtp- პორტი", + "smtp-port-required": "smtp- პორტი აუციელებელია", + "smtp-port-invalid": "smtp-პორტი არასწორია", + "timeout-msec": "ტაიმაუტი (მ/წ)", + "timeout-required": "ტაიმაუტი აუცილებელია", + "timeout-invalid": "არასწორი ტაიმაუტის დრო", + "enable-tls": "TLS-ის ჩართვა", + "send-test-mail": "სატესტო წერილის გაგზავნა", + "security-settings": "უსაფრთხოების პარამეტრები", + "password-policy": "პაროლის პოლიტიკა", + "minimum-password-length": "მინიმალური პაროლის სიგრძე", + "minimum-password-length-required": "პაროლის მინიმალური ზომა", + "minimum-password-length-range": "პაროლის სიგრძის მინიმალური დიაპაზონი", + "minimum-uppercase-letters": "მინიმალური-დიდი ასოები", + "minimum-uppercase-letters-range": "გამოიყენეთ მინიმუმ 1 დიდი ასო", + "minimum-lowercase-letters": "მინიმალური-მცირე ასოები", + "minimum-lowercase-letters-range": "მინიმალური-მცირე ასოების დიაპაზონი", + "minimum-digits": "ციფრების მინიმალური რაოდენობა", + "minimum-digits-range": "ციფრების მინიმალური დიაპაზონი", + "minimum-special-characters": "სიმბოლოების მინიმალური რაოდენობა", + "minimum-special-characters-range": "სიმბოლოების რაოდენობა არ შეიძლება იყოს ნეგატიური", + "password-expiration-period-days": "პაროლის ვადა", + "password-expiration-period-days-range": "პაროლის ვადა არ შეიძლება იყოს უარყოფითი", + "password-reuse-frequency-days": "პაროლის განმეორებით გამოყენების სიხშირე (დღე)", + "password-reuse-frequency-days-range": "პაროლის განმეორებით გამოყენების სიხშირე არ შეიძლება იყოს ნეგატიური", + "general-policy": "ზოგადი პოლიტიკა", + "max-failed-login-attempts": "მაქსიმალური შესვლის მცდელობები", + "minimum-max-failed-login-attempts-range": "მაქსიმალური შესვლის მცდელობების რაოდენობა არ შეიძლება იყოს ნეგატიური", + "user-lockout-notification-email": "თუ დაგებლოკათ ანგარიში გააგზავნეთ ნოთიფიკაცია მეილზე" + }, + "alarm": { + "alarm": "განგაში", + "alarms": "განგაშები", + "select-alarm": "აირჩიე განგაში", + "no-alarms-matching": "შესატყვისი განგაში '{{entity}}' ვერ მოიძებნა.", + "alarm-required": "საჭიროა განგაში", + "alarm-status": "განგაშის სტატუსი", + "search-status": { + "ANY": "ნებისმიერი", + "ACTIVE": "აქტიური", + "CLEARED": "გასუფთავებული", + "ACK": "დასტური", + "UNACK": "დაუდასტურებელი" + }, + "display-status": { + "ACTIVE_UNACK": "აქტიური დაუდასტურებელი", + "ACTIVE_ACK": "აქტიური დადასტურებული", + "CLEARED_UNACK": "გასუფთავება დაუდასტურებელი", + "CLEARED_ACK": "გასუფთავება_დადასტურებული" + }, + "no-alarms-prompt": "განგაში არ არსებობს", + "created-time": "შექმნის დრო", + "type": "ტიპი", + "severity": "დონე", + "originator": "ინიციატორი", + "originator-type": "ინიციატორის ტიპი", + "details": "დეტალები", + "status": "სტატუსი", + "alarm-details": "განგაშის დეტალები", + "start-time": "დაწყების დრო", + "end-time": "დასრულების დრო", + "ack-time": "დადასტურების დრო", + "clear-time": "გასუფთავების დრო", + "severity-critical": "სიმძიმე-კრიტიკული", + "severity-major": "სიმძიმე-დიდი", + "severity-minor": "სიმძიმე-მცირე", + "severity-warning": "სიმძიმის გაფრთხილება", + "severity-indeterminate": "სიმძიმე-განუსაზღვრელი", + "acknowledge": "დადასტურება", + "clear": "გასუფთავება", + "search": "ძიება", + "selected-alarms": "შერჩეული განგაშები", + "no-data": "მონაცემები არ არის", + "polling-interval": "კითხვის ინტერვალი", + "polling-interval-required": "კითხვის ინტერვალი აუცილებელია", + "min-polling-interval-message": "გამოთხვისი მინიმალური ინტერვალი", + "aknowledge-alarms-title": "გაფრთხილების დასტური სათაური", + "aknowledge-alarms-text": "დარწმუნებული ხართ რომ გინდათ დაადასტუროთ { count, plural, 1 {1 alarm} other {# alarms} }?", + "aknowledge-alarm-title": "დაადასტურე გაფრთხილება", + "aknowledge-alarm-text": "გაფრთხილების დადასტურება", + "clear-alarms-title": "წაშლა { count, plural, 1 {1 alarm} other {# alarms} }", + "clear-alarms-text": "დარწმუნებული ხართ რომ გინდათ წაშალოთ { count, plural, 1 {1 alarm} other {# alarms} }?", + "clear-alarm-title": "გართხილების სათაურის წაშლა", + "clear-alarm-text": "ნამდვილად გინდათ გაფრთხილების წაშლა", + "alarm-status-filter": "განგაშის სტატუსის ფილტრი", + "max-count-load": "გაფრთხილების მაქსიმალური რაოდენობა (0-შეუზღუდავი)", + "max-count-load-required": "გაფრთხილების მაქსიმალური რაოდენობა აუცილებელია", + "max-count-load-error-min": "მინიმალური მნიშვნელობა 0", + "fetch-size": "ჩასატვირთი პაკეტის ზომა", + "fetch-size-required": "მიუთითეთ ჩასატვირთი პაკეტის ზომა", + "fetch-size-error-min": "ჩასატვირთი პაკეტის -შეცდომა-წთ" + }, + "alias": { + "add": "დამატება", + "edit": "რედაქტირება", + "name": "სახელი", + "name-required": "სახელი აუცილებელია", + "duplicate-alias": "ასეთი ჩანაწერი არსებობს", + "filter-type-single-entity": "ფილტრის ტიპის ერთეული", + "filter-type-entity-list": "ფილტრის ტიპის სია", + "filter-type-entity-name": "ფილტრის ტიპის სახელი", + "filter-type-state-entity": "ფილტრის ტიპის სუბიექტი", + "filter-type-state-entity-description": "ფილტრის ტიპის სუბიექტის აღწერა", + "filter-type-asset-type": "აქტივის ტიპი", + "filter-type-asset-type-description": "აქტივის ტიპის აღწერა '{{assetType}}'", + "filter-type-asset-type-and-name-description": "ტიპის ასეტები '{{assetType}}' და სახელები რომლები იწყება '{{prefix}}'", + "filter-type-device-type": "მოწყობილობის ტიპი", + "filter-type-device-type-description": "ტიპის მოწყობილობები '{{deviceType}}'", + "filter-type-device-type-and-name-description": "ტიპის მოწყობილობები '{{deviceType}}' რომლების სახელებიც იწყება '{{prefix}}'", + "filter-type-entity-view-type": "ობიექტის მოწყობილობის ტიპი", + "filter-type-entity-view-type-description": "ობიექტის ტიპის ვარიანტები '{{entityView}}'", + "filter-type-entity-view-type-and-name-description": "ობიექტის ტიპის განსაზღვრება '{{entityView}}' და დასახელება რომელიც იწყება '{{prefix}}'", + "filter-type-relations-query": "მოთხოვნა რელაციის ტიპის მიხედვით", + "filter-type-relations-query-description": "{{entities}}, არსებული რელაციის ტიპი {{relationType}} {{direction}} {{rootEntity}}", + "filter-type-asset-search-query": "ძიება აქტივების მიხედვით", + "filter-type-asset-search-query-description": "აქტივების ტიპი {{assetTypes}}, არსებული აქტივები {{relationType}} {{direction}} {{rootEntity}}", + "filter-type-device-search-query": "ძიება მოწყობილობების მიხედვით", + "filter-type-device-search-query-description": "მოწყობილობის ტიპი {{deviceTypes}}, არსებული ტიპები {{relationType}} {{direction}} {{rootEntity}}", + "filter-type-entity-view-search-query": "ძიება ობიეტქების მიხევით", + "filter-type-entity-view-search-query-description": "ობიექტის ტიპის განსაზღვრება {{entityViewTypes}}, არსებული რელაციები {{relationType}} {{direction}} {{rootEntity}}", + "entity-filter": "ობიექტების ფილტრი", + "resolve-multiple": "როგორც მრავალი ობიექტი", + "filter-type": "ფილტრის ტიპი", + "filter-type-required": "სავალდებულო ფილტრის ტიპი", + "entity-filter-no-entity-matched": "ფილტრის შესაბამისი ობიექტები არ იძებნება", + "no-entity-filter-specified": "ობიექტის ფილტრი არ არ არის მითითებული", + "root-state-entity": "ობიექტის გამოყენება დეშბორდიდან როგორც ძირეული", + "root-entity": "ძირეული ობიექტი", + "state-entity-parameter-name": "სტატუსის ერთეულის პარამეტრის სახელი", + "default-state-entity": "ობიექტის ნაგულისხმევი სტატუსი", + "default-entity-parameter-name": "ობიექტის ნაგულისხმევი სახელი", + "max-relation-level": "მაქს. რელაციის დონე", + "unlimited-level": "ულიმიტო დონე", + "state-entity": "ობიექტის სტატუსი", + "all-entities": "ყველა ერთეული", + "any-relation": "ნებისმიერი რელაცია" + }, + "asset": { + "asset": "აქტივი", + "assets": "აქტივები", + "management": "მენეჯმენტი", + "view-assets": "აქტივების ნახვა", + "add": "დამატება", + "assign-to-customer": "მომხმარებელზე მინიჭება", + "assign-asset-to-customer": "აქტივის მინიჭება კლინტზე", + "assign-asset-to-customer-text": "შეარჩიეთ კატივი კილენტზე მისანიჭებლად", + "no-assets-text": "აქტივი არ იძებნება", + "assign-to-customer-text": "აირჩიე კლიენტი აქტივის მისანიჭებლად", + "public": "საჯარო", + "assignedToCustomer": "კლიენტზე მიბმა", + "make-public": "გასაჯაროება", + "make-private": "გასაჯარეობის გათიშვა", + "unassign-from-customer": "კლიენტისგან მოხსნა", + "delete": "წაშლა", + "asset-public": "საჯარო აქტივი", + "asset-type": "აქტივის ტიპი", + "asset-type-required": "აქტივის ტიპი სავალდებულოა", + "select-asset-type": "აირჩიეთ აქტივის ტიპი", + "enter-asset-type": "შეიყვანეთ აქტივის ტიპი", + "any-asset": "ნებისმიერი აქტივი", + "no-asset-types-matching": "აქტივის ტიპი '{{entitySubtype}}' ვერ მოიძებნა.", + "asset-type-list-empty": "აქტივის ტიპი ცარიელია", + "asset-types": "აქტივების ტიპები", + "name": "სახელი", + "name-required": "სახელი სავალდებულოა.", + "description": "აღწერა", + "type": "ტიპი", + "type-required": "ტიპი სავალდებულოა.", + "details": "დეტალები", + "events": "ივენთი", + "add-asset-text": "აქტივის დამატება", + "asset-details": "აქტივების დეტალები", + "assign-assets": "აქტივის მინიჭება", + "assign-assets-text": "აქტივის { count, plural, 1 {1 asset} other {# assets} } მინიჭება კლიენტზე", + "delete-assets": "აქტივების წაშლა", + "unassign-assets": "აქტივების მოშორება", + "unassign-assets-action-title": "გამოხმობა { count, plural, 1 {1 asset} other {# assets} } კლიენტისგან", + "assign-new-asset": "ახალი აქტივის მინიჭება", + "delete-asset-title": "დარწმუნებული ხართ რომ წავშალო '{{assetName}}' აქტივი?", + "delete-asset-text": "ფრთხილად, დადასტურების შემდეგ ყველა აქტივი წაიშლება და მონაცემები ვეღარ აღდგება.", + "delete-assets-title": "დარწმუნებული ხართ რომ წაიშალოს { count, plural, 1 {1 asset} other {# assets} }?", + "delete-assets-action-title": " { count, plural, 1 {1 asset} other {# assets} } წაშლა", + "delete-assets-text": "ფრთხილად, დადასტურების შემდეგ ყველა მონიშნული აქტივი წაიშლება და მონაცემები ვეღარ აღდგება.", + "make-public-asset-title": "დარწმუნებული ხართ რომ გნებავთ აქტივის '{{assetName}}' გასაჯაროება?", + "make-public-asset-text": "დადასტურების შედეგად აქტივი და მისი მონაცემები გახდება საჯარო და ხელმისაწვდომი ყველასთვის.", + "make-private-asset-title": "დარწმუნებული ხართ რომ გნებავთ აქტივის '{{assetName}}' დამალვა?", + "make-private-asset-text": "დადასტურების შედეგად აქტივი და მისი მონაცემები გახდება პრივატული და ხელმიუწვდომელი ყველასთვის.", + "unassign-asset-title": "დატწმუნებული ხართ რომ გნებავთ აქტივის '{{assetName}}' გამოხმობა?", + "unassign-asset-text": "დადასტურების შედეგად აქტივი გახდება კლიენტისთვის ხელმიუწვდომელი.", + "unassign-asset": "აქტივის გამოხმობა", + "unassign-assets-title": "დარწმუნებული ხართ რომ გნებავთ გამოიხმოთ { count, plural, 1 {1 asset} other {# assets} }?", + "unassign-assets-text": "დადასტურების შედეგად ყველა მონიშნული აქტივი გახდება კლიენტისთვის ხელმიუწვდომელი.", + "copyId": "აქტივის ID-ის დაკოპირება", + "idCopiedMessage": "აქტივი დაკოპირებულია კლიპბორდში", + "select-asset": "აქტივის მონიშვნა", + "no-assets-matching": "შესაბამისი აქტივი '{{entity}}' არ მოიძებნა.", + "asset-required": "აქტივი აუცილებელია", + "name-starts-with": "აქტივის სახელი იწყება", + "import": "აქტივების იმპორტი", + "asset-file": "აქტივის ფაილი", + "search": "აქტივების ძიება", + "selected-assets": "{ count, plural, 1 {1 asset} other {# assets} } მონიშნულია", + "label": "ნიშნული" + }, + "attribute": { + "attributes": "ატრიბუტები", + "latest-telemetry": "უახლესი ტელემეტრია", + "attributes-scope": "ობიექტის ატრიბუტების ფარგლები", + "scope-latest-telemetry": "უახლესი ტელემეტრია", + "scope-client": "კლიენტის ატრიბუტები", + "scope-server": "სერვერის ატრიბუტები", + "scope-shared": "ატრიბუტების გაზიარება", + "add": "ატრიბუტის დამატება", + "key": "გასაღები", + "last-update-time": "ბოლო განახლების დრო", + "key-required": "ატრიბუტის გასაღები სავალდებულოა.", + "value": "მნიშვნელობა", + "value-required": "ატრიბუტის მნიშვნელობა საჭიროა.", + "delete-attributes-title": "დარწმუნებული ხართ რომ გსურთ წაშალოთ { count, plural, 1 {1 attribute} other {# attributes} }?", + "delete-attributes-text": "ფრთხილად, დადასტურების შემდეგ ყველა მონიშნული ატრიბუტი წაიშლება.", + "delete-attributes": "ატრიბუტების წაშკა", + "enter-attribute-value": "შეიყვანეთ ატრიბუტის მნიშვნელობა", + "show-on-widget": "ვიჯეტზე გამოტანა", + "widget-mode": "ვიჯეტის რეჟიმი", + "next-widget": "შემდეგი ვიჯეტი", + "prev-widget": "წინა ვიჯეტი", + "add-to-dashboard": "დეშბორდზე დამატება", + "add-widget-to-dashboard": "ვიჯეტის დეშბორდზე დამატება", + "selected-attributes": "{ count, plural, 1 {1 attribute} other {# attributes} } მონიშნულია", + "selected-telemetry": "{ count, plural, 1 {1 telemetry unit} other {# telemetry units} } მონიშნულია" + }, + "audit-log": { + "audit": "აუდიტი", + "audit-logs": "აუდიტორული ჟურნალი", + "timestamp": "თაიმსტემპი", + "entity-type": "ობიექტის ტიპი", + "entity-name": "ობიექტის სახელი", + "user": "მომხმარებელი", + "type": "ტიპი", + "status": "სტატუსი", + "details": "დეტალები", + "type-added": "დამატებული", + "type-deleted": "წაშლილი", + "type-updated": "განახლებული", + "type-attributes-updated": "განახლებული ატრიბუტები", + "type-attributes-deleted": "წაშლილი ატრიბუტები", + "type-rpc-call": "RPC გამოძახება", + "type-credentials-updated": "მომხმარებლის ჩანაწერი განახლებულია", + "type-assigned-to-customer": "კლიენტზე მიმაგრებული", + "type-unassigned-from-customer": "კლიენტისგან მოხსნილი", + "type-activated": "გააქტიურებული", + "type-suspended": "შეჩერებული", + "type-credentials-read": "მომხმარებლის ჩანაწრის წაკითხვა", + "type-attributes-read": "ატრიბუტების წაკითხვა", + "type-relation-add-or-update": "რელაცია განახლებულია", + "type-relation-delete": "რელაცია წაშლილია", + "type-relations-delete": "ყველა რელაციის წაშლა", + "type-alarm-ack": "დადასტურებულია", + "type-alarm-clear": "გასუფთავებულია", + "type-login": "შესვლა", + "type-logout": "გამოსვლა", + "type-lockout": "ჩაკეტვა", + "status-success": "წარმატება", + "status-failure": "წარუმატებელი", + "audit-log-details": "აუდიტის ჟურნალის დეტალები", + "no-audit-logs-prompt": "ლოგები არ მოიძებნა", + "action-data": "მოქმედების მონაცემები", + "failure-details": "პრობლემის დეტალები", + "search": "აუდიტის ლოგებში ძიება", + "clear-search": "ძებნის გასუფთავება" + }, + "confirm-on-exit": { + "message": "თქვენ გაქვთ დაუმახსოვრებელი ცვლილებები. დარწმუნებული ხართ რომ გინდათ ამ გვერდიდან გადასვლა?", + "html-message": "თქვენ გაქვთ დაუმახსოვრებელი ცვლილებები.
დარწმუნებული ხართ რომ გინდათ ამ გვერდიდან გადასვლა?", + "title": "დაუმახსოვრებელი ცვლილებები" + }, + "contact": { + "country": "ქვეყანა", + "city": "ქალაქი", + "state": "შტატი/პროვინცია", + "postal-code": "საფოსტო ინდექსი", + "postal-code-invalid": "საფოსტო კოდი არასწორია", + "address": "მისამართი", + "address2": "მისამართი 2", + "phone": "ტელეფონი", + "email": "ელ.ფოსტა", + "no-address": "მისამართის გარეშე" + }, + "common": { + "username": "მომხმარებლის სახელი", + "password": "პაროლი", + "enter-username": "შეიყვანეთ მომხმარებლის სახელი", + "enter-password": "შეიყვანეთ პაროლი", + "enter-search": "შეიყვანეთ საძიებო სიტყვა" + }, + "content-type": { + "json": "ჯეისონი", + "text": "ტექსტი", + "binary": "ორობითი (base64)" + }, + "customer": { + "customer": "კლიენტი", + "customers": "კლიენტები", + "management": "კლიენტების მართვა", + "dashboard": "მომხმარებლის დაშბორდი", + "dashboards": "მომხმარებლის დაშბორდები", + "devices": "მომხმარებლის მოწყობილობები", + "entity-views": "მომხმარებლის ობიექტები", + "assets": "კლიენტების აქტივები", + "public-dashboards": "საჯარო დეშბორდები", + "public-devices": "საჯარო მოწყობილობები", + "public-assets": "საჯარო აქტივები", + "public-entity-views": "ობიექტის საკჯარო წარმოდგენა", + "add": "მომხმარებლის დამატება", + "delete": "მომხმარებლის წაშლა", + "manage-customer-users": "კლიენტის ჯგუფის მართვა", + "manage-customer-devices": "მომხმარებელთა მოწყობილობების მართვა", + "manage-customer-dashboards": "კლიენტის დეშბორდების მართვა", + "manage-public-devices": "საჯარო მოწყობილობების მართვა", + "manage-public-dashboards": "საჯარო დეშბორდების მართვა", + "manage-customer-assets": "კლიენტების აქტივების მართვა", + "manage-public-assets": "საჯარო აქტივების მართვა", + "add-customer-text": "ახალი მომხმარებლის დამატება", + "no-customers-text": "მომხმარებელი არ იძებნება", + "customer-details": "მომხმარებლის დეტალები", + "delete-customer-title": "დარწმუნებული ხართ რომ გსურთ წაშალოთ მომხმარებელი '{{customerTitle}}'?", + "delete-customer-text": "ყურადღებით დადასტურების შემდეგ ყველა მონიშნული მომხმარებელი და მასთან დაკავშირებული მონაცემები წაიშლება.", + "delete-customers-title": "დაწრმუნებული ხართ რომ გსურთ წაშალოთ { count, plural, 1 {1 customer} other {# customers} }?", + "delete-customers-action-title": "წაშლა { count, plural, 1 {1 customer} other {# customers} }", + "delete-customers-text": "ყურადღებით დადასტურების შემდეგ ყველა მონიშნული მომხმარებელი და მასთან დაკავშირებული მონაცემები წაიშლება.", + "manage-users": "მომხმარებლების მართვა", + "manage-assets": "აქტივების მართვა", + "manage-devices": "მოწყობილობების მართვა", + "manage-dashboards": "დეშბორდების მართვა", + "title": "სათაური", + "title-required": "სათაური აუცილებელია", + "description": "აღწერილობა", + "details": "დეტალები", + "events": "ივენთები", + "copyId": "მომხმარებლის ID ის დაკოპირება", + "idCopiedMessage": "კლიენიტს ID-ის დაკოპირებულია კლიპბორდში", + "select-customer": "აირჩიე მომხმარებელი", + "no-customers-matching": "მომხმარებელი '{{entity}}' არ მოიძებნა.", + "customer-required": "მომხმარებელი სავალდებულოა", + "select-default-customer": "აირჩიეთ ნაგულისხმევი კლიენტი", + "default-customer": "ნაგულისხმევი კლიენტი", + "default-customer-required": "ნაგულისხმევი კლიენტი სავალდებულოა რომ მოხერხდეს დეშბორდის ანალიზი ტენანტის დონეზე", + "search": "მომხმარებლების ძიება", + "selected-customers": "შერჩეული მომხმარებლები" + }, + "datetime": { + "date-from": "თარიღიდან", + "time-from": "დრო-დან", + "date-to": "თარიღამდე", + "time-to": "დრომდე" + }, + "dashboard": { + "dashboard": "დეშბორდი", + "dashboards": "დეშბორდები", + "management": "დეშბორდების მენეჯმენტი", + "view-dashboards": "შეხედე დეშბორდებს", + "add": "დაამატე დეშბორდი", + "assign-dashboard-to-customer": "მიამაგრე დეშბორდი მომხმარებელს", + "assign-dashboard-to-customer-text": "გთხოვთ აირჩიოთ მოხმარებელზე მისამაგრებელი დეშბორდი", + "assign-to-customer-text": "გთხოვთ აირჩიოთ მოხმარებელი რომ მიამაგროთ დეშბორდს", + "assign-to-customer": "მომხმარებელზე მიმაგრება", + "unassign-from-customer": "მომხმარებლისგან მოხსნა", + "make-public": "გახადე დეშბორდი საჯარო", + "make-private": "გახადე დეშბორდი პრივატული", + "manage-assigned-customers": "მიმაგრებული მომხმარებლების მართვა", + "assigned-customers": "მინიჭებული მოხმარებლები", + "assign-to-customers": "დეშბორდის მომხმარებეზე მიბმა", + "assign-to-customers-text": "გთხოვთ აირჩიოთ მოხმარებლები რათა მიამაგროს დეშბორდი", + "unassign-from-customers": "მომხარებლებისგან დეშბორიდს მოხსნა", + "unassign-from-customers-text": "გთხოვთ აირჩიოთ მოხმარებლები რათა მოეხსნათ დეშბორდი", + "no-dashboards-text": "დეშბორდი არ იძებნა", + "no-widgets": "ვიჯეტები არ არის დაკომფიგირებული", + "add-widget": "ვიჯეტის დამატება", + "title": "სათაური", + "select-widget-title": "აირჩიეთ ვიჯეტი", + "select-widget-subtitle": "ხელმისაწვდომი ვიჯეტების სია", + "delete": "დეშბორდის წაშლა", + "title-required": "სათაური აუცილებელია", + "description": "აღწერილობა", + "details": "დეტალები", + "dashboard-details": "დეშბორდის დეტალები", + "add-dashboard-text": "დაამატე ახალი დეშბორდი", + "assign-dashboards": "მიამაგრე დეშბორდები", + "assign-new-dashboard": "მიამაგრე ახალი დეშბორდი", + "assign-dashboards-text": "მიამაგრე { count, plural, 1 {1 dashboard} other {# dashboards} } მომხმარებელს", + "unassign-dashboards-action-text": "მოხსენი { count, plural, 1 {1 dashboard} other {# dashboards} } მომხმარებელს", + "delete-dashboards": "დეშბორდების წაშლა", + "unassign-dashboards": "დეშბორდების მოხსნა", + "unassign-dashboards-action-title": "მოხსენი { count, plural, 1 {1 dashboard} other {# dashboards} } მომხმარებელს", + "delete-dashboard-title": "დარწმუნებული ხართ რომ გინდათ დეშბორდის წაშლა '{{dashboardTitle}}'?", + "delete-dashboard-text": "ყურადღებით, დადასტურების შემდეგ დეშბორდი ყველა მონიშნული მონაცემები გახდება ხელმიუწვდომელი", + "delete-dashboards-title": "დარწმუნებული ხართ რომ გინდათ წაშლა { count, plural, 1 {1 dashboard} other {# dashboards} }?", + "delete-dashboards-action-title": "წაშლა { count, plural, 1 {1 dashboard} other {# dashboards} }", + "delete-dashboards-text": "ყურადღებით, დადასტურების შემდეგ დეშბორდი ყველა მონიშნული მონაცემები გახდება ხელმიუწვდომელი", + "unassign-dashboard-title": "ნამდვილად გსურთ დეშბორდის გამოხმობა '{{dashboardTitle}}'?", + "unassign-dashboard-text": "დადასტურების შემდგომ დეშბორდი არ იქნება ხელმისაწვდომი კლიენტისთვის", + "unassign-dashboard": "დეშბორდის გამოხმობა", + "unassign-dashboards-title": "ნამდვილად გსურთ დეშბორდის გამოხმობა { count, plural, 1 {1 dashboard} other {# dashboards} }?", + "unassign-dashboards-text": "დადასტურების შემდგომ დეშბორდი არ იქნება ხელმისაწვდომი კლიენტისთვის", + "public-dashboard-title": "დეშბორდი ხელმისაწვდომია", + "public-dashboard-text": "დეშბორდი ხელმისაწვდომია {{dashboardTitle}} is now public and accessible via next public link:", + "public-dashboard-notice": "შენიშვნა: მოწყობილობის მონაცემებზე წვდომისთვის, თქვენ უნდა გახსთათ წვდომა ამ მოწყობილობებთან", + "make-private-dashboard-title": "დარწმუნებული ხართ რომ გინდათ გახადოთ დეშბორდი '{{dashboardTitle}}' პრივატული?", + "make-private-dashboard-text": "დადასტურების შემდეგ დეშბორდი გახდება პრივატული და აღარ იქნება ხელმისაწვდომი სხვა მომხმარებლებისთვის", + "make-private-dashboard": "აქციე დეშბორდი პრივატულად", + "socialshare-text": "სოციალური ტექსტი", + "socialshare-title": "'{{dashboardTitle}}' Powered by Giot", + "select-dashboard": "აირჩიე დეშბორდი", + "no-dashboards-matching": "'{{entity}}'-ს მზგავსი დეშბორდი არ იქნა ნაპოვნი.", + "dashboard-required": "დეშბორდი აუცილებელია", + "select-existing": "აირჩიე არსებული დეშბორდი", + "create-new": "შექმენი ახალი დეშბორდი", + "new-dashboard-title": "ახალი დეშბორდის სათაური", + "open-dashboard": "ღია დეშბორდი", + "set-background": "დააყენე ფონი", + "background-color": "ფონის ფერი", + "background-image": "ფონის სურათი", + "background-size-mode": "ფონის ზომის მოუდი", + "no-image": "აირჩიეთ სურათი", + "drop-image": "ჩააგდეთ სურათი ან დააჭირეთ სურათის ასატვირთად", + "settings": "პარამეტრები", + "columns-count": "სვეტების დათვლა", + "columns-count-required": "სვეტების დათვლა სავალდებულოა", + "min-columns-count-message": "მინიმალური სვეტების დათვლის რაოდენობაა 10", + "max-columns-count-message": "მაქსიმალური სვეტების დათვლის რაოდენობაა 1000", + "widgets-margins": "ვიჯეტებს შორის ზღვარი", + "horizontal-margin": "ჰორიზონტალური ზღვარი", + "horizontal-margin-required": "'ჰორიზონტალური ზღვარი' მნიშვნელობა სავალდებულოა", + "min-horizontal-margin-message": "მინიმალური ჰორიზონტალური ზღვარი არის 0", + "max-horizontal-margin-message": "მაქსიმალრუი ჰორიზონტალური ზღვარი არის 50", + "vertical-margin": "ვერტიკალური ზღვარი", + "vertical-margin-required": "ვერტიკალური ზღვარი მნიშვნელობა სავალდებულოა", + "min-vertical-margin-message": "მინიმალური ვერტიკალური ზღვარი არის 0", + "max-vertical-margin-message": "მაქსიმალური ვერტიკალური ზღვარი არის 50", + "autofill-height": "ინტერფეისის სიმაღლის ავტომატური შერჩევა", + "mobile-layout": "მობილური წყობის პარამეტრები", + "mobile-row-height": "მობილური რიგის სიმაღლე PX", + "mobile-row-height-required": "მობილური რიგის სიმაღლე სავალდებულოა", + "min-mobile-row-height-message": "მობილური რიგის მინიმალური სიმაღლე არის 5 პიქსელი", + "max-mobile-row-height-message": "მობილური რიგის მაქსიმალური სიმაღლე არის 200 პიქსელი", + "display-title": "აჩვენე დეშბორდის სათაური", + "toolbar-always-open": "დატოვეთ ინსტრუმენტების პანელი ღია", + "title-color": "სათაურის ფერი", + "display-dashboards-selection": "დეშბორდების არჩევანის ჩვენება", + "display-entities-selection": "ობიექტის არჩევანის ჩვენება", + "display-dashboard-timewindow": "დროის მონაკვეტის ჩვენება", + "display-dashboard-export": "ექსპორტის ჩვენება", + "import": "დეშბორდის იმპორტი", + "export": "დეშბორდის ექსპორტი", + "export-failed-error": "დეშბორდის ექსპორტი შეუძლებელია: {{error}}", + "create-new-dashboard": "ახალი დეშბორდის შექმნა", + "dashboard-file": "დეშბორდის ფაილი", + "invalid-dashboard-file-error": "დეშბორდის იმპორტი შეუძლებელია: დეშბორდის სტრუქტურა დარღვეულია", + "dashboard-import-missing-aliases-title": "დააყენეთ იმპორტირებული დეშბორდების ზედმეტსახელები", + "create-new-widget": "შექმენი ახალი ვიჯეტი", + "import-widget": "ვიჯეტის იმპორტი", + "widget-file": "ვიჯეტ ფაილი", + "invalid-widget-file-error": "ვიჯეტის იმპორტი შეუძლებელია: ვიჯეტის სტრუქტურა დარღვეულია", + "widget-import-missing-aliases-title": "დააყენე იმპორტირებული ვიჯეტის ზედმეტსახელი", + "open-toolbar": "დეშბორდის პანელის გახსნა", + "close-toolbar": "პანელის დახურვა", + "configuration-error": "კონფიგურაციის შეცდომა", + "alias-resolution-error-title": "დეშბორდის ზედმეტსახელის კონფიგურაციის შეცდომა", + "invalid-aliases-config": "ზედმეტსახელის ფილტრს არ ემთხვევა არცერთი მოწყობილობა.
გთხოვთ მიმართეთ თქვენს ადმინისტრატორს.", + "select-devices": "აირჩიეთ მოწყობილობები", + "assignedToCustomer": "მიმაგრებული მომხმარებელზე", + "assignedToCustomers": "მიმაგრებული მომხმარებლელბზე", + "public": "საჯარო", + "public-link": "საჯარო ბმული", + "copy-public-link": "დააკოპირე საჯარო ბმული", + "public-link-copied-message": "დეშბორდის საჯარო ბმული დაკოპირებულია", + "manage-states": "გააკონტროლე დეშბორდის მდგომარეობა", + "states": "დეშბორდის მდგომარეობა", + "search-states": "მოძებნე დეშბორდის მდგომარეობა", + "selected-states": "{ count, plural, 1 {1 dashboard state} other {# dashboard states} } არჩეულია", + "edit-state": "დეშბორდის მდგომარეობის რედაქტირება", + "delete-state": "დეშბორდის მდგომარეობის წაშლა", + "add-state": "დაამატე დეშბორდის მდგომარეობა", + "state": "დეშბორდის მდგომარეობა", + "state-name": "მდგომარეობა", + "state-name-required": "დეშბორდის მოცემულობის დასახელება სავალდებულოა", + "state-id": "ID მოცემულობა", + "state-id-required": "დეშბორდის ID მოცემულობა სავალდებულოა", + "state-id-exists": "არსებული სახელით დეშბორდი უკვე არსებობს", + "is-root-state": "არის ძირეული მდგომარეობა", + "delete-state-title": "დეშბორდის მოცემულობის წაშლა", + "delete-state-text": "დარწმუნებული ხართ რომ გსურთ წაშალოთ დეშბორდი '{{stateName}}'?", + "show-details": "დეტალების გამოტანა", + "hide-details": "დეტალების დაფარვა", + "select-state": "მდგომარების არჩევა", + "state-controller": "მდგომარების კონტროლერი", + "search": "მოძებნე დეშბორდი", + "selected-dashboards": "{ count, plural, 1 {1 dashboard} other {# dashboards} } არჩეულია" + }, + "datakey": { + "settings": "პარამეტრები", + "advanced": "დამატებითი", + "label": "ნიშნული", + "color": "ფერი", + "units": "მიუთითეთ სიმბოლოები რომლებიც უნდა გამოიყენოთ დანაყოფების შემდგომ", + "decimals": "წილადები", + "data-generation-func": "მონაცემთა გენერირების ფუნქცია", + "use-data-post-processing-func": "მონაცემების დამუშავებათა შემდგომი ფუნქციის გამოყენება", + "configuration": "მონაცემთა გასაღების კონფიგურაცია", + "timeseries": "ტელემეტრია", + "attributes": "ატრიბუტები", + "entity-field": "ერთეული ობიექტის ველი", + "alarm": "განგაში", + "timeseries-required": "ტელემეტრია ობიექტის სავალდებულოა", + "timeseries-or-attributes-required": "ტელემეტრია/ატრიბუტები სავალდებულოა", + "maximum-timeseries-or-attributes": "მაქსიმალური { count, plural, 1 {1 timeseries/attribute is allowed.} other {# timeseries/attributes are allowed} }", + "alarm-fields-required": "განგაშის ველები სავალდებულოა", + "function-types": "ფუნქციის ტიპები", + "function-types-required": "ფუნქციის ტიპები სავალდებულოა", + "maximum-function-types": "მაქსიუმალური { count, plural, 1 {1 function type is allowed.} other {# function types are allowed} }", + "time-description": "დრო არსებული მნიშნველობისთვის", + "value-description": "არსებული ღირებულება", + "prev-value-description": "წინა ფუნქციის რეზულტატი", + "time-prev-description": "წინა მნიშვნელობის დრო", + "prev-orig-value-description": "ორიგინალი წინა მნიშვნელობა" + }, + "datasource": { + "type": "ინფორმაციის წყაროს ტიპი", + "name": "სახელი", + "add-datasource-prompt": "დაამატეთ მონაცემთა წყარო" + }, + "details": { + "details": "დეტალები", + "edit-mode": "რედაქტირების რეჟიმში", + "toggle-edit-mode": "რედაქტირების რეჟიმში ჩართვა/გამორთვა" + }, + "device": { + "device": "მოწყობილობა", + "device-required": "მოწყობილობა სავალდებულოა", + "devices": "მოწყობილობები", + "management": "მოწყობილობების მენეჯმენტი", + "view-devices": "ნახე მოწყობილობები", + "device-alias": "მოწყობილობის ზედმეტსახელი", + "aliases": "მოწყობილობების ზედმეტსახელები", + "no-alias-matching": "'{{alias}}' არ მოიძებნა", + "no-aliases-found": "ზედმეტსახელი არ მოიძებნა", + "no-key-matching": "'{{key}}' არ მოიძებნა", + "no-keys-found": "გასაღებები არ მოიძებნა", + "create-new-alias": "შექმენი ახალი!", + "create-new-key": "შექმენი ახალი!", + "duplicate-alias-error": "ნაპოვნია დუბლიკატი ზედმეტსახელი '{{alias}}'.
მოწყობილობის ზედმესახელი უნდა იყოს უნიკალური დაშბორდის მასშტაბით.", + "configure-alias": "დააყენე '{{alias}}' ზედმეტსახელი", + "no-devices-matching": "მოწყობილობები რომლებიც ემთხვევა '{{entity}}' არ იქნა აღმოჩენილი", + "alias": "ზედმეტსახელი", + "alias-required": "მოწყობილობის ზედმეტსახელი სავალდებულოა", + "remove-alias": "წაშალე მოწყობილობის ზედმესახელი", + "add-alias": "დაამატე მოწყობილობის ზედმესახელი", + "name-starts-with": "მოწყობილობის სახელი იწყება", + "device-list": "მოწყობილობის სია", + "use-device-name-filter": "ფილტრის გამოყენება", + "device-list-empty": "არ არის არცეული მოწყობილობა", + "device-name-filter-required": "მოწყობილობის სახელის ფილტრი სავალდებულოა", + "device-name-filter-no-device-matched": "მოწყობილობები რომლებიც ემთხვევა '{{device}}' არ იქნა აღმოჩენილი", + "add": "მოწყობილობის დამატება", + "assign-to-customer": "კლიენტზე მიბმა", + "assign-device-to-customer": "მოწყობილობების კლიენტზე მიბმა", + "assign-device-to-customer-text": "გთხოვთ აირჩიოთ მოწყობილობები კლიენტზე მისამაგრებლად", + "make-public": "გახადე მოწყობილობა საჯარო", + "make-private": "გახადე მოწყობილობა პრივატული", + "no-devices-text": "მოწყობილობები არ იქნა აღმოჩენილი", + "assign-to-customer-text": "გთხოვთ აირჩიოთ კლიენტი რომ მიამაგროთ მოწყობილობები", + "device-details": "მოწყობილობის დეტალები", + "add-device-text": "ახალი მოწყობილობის დამატება", + "credentials": "მოხმარებლის ჩანაწერი", + "manage-credentials": "მომხმარებლის ცანაწერის მართვა", + "delete": "მოწყობილობის წაშლა", + "assign-devices": "მოწყობილობის მინიჭება", + "assign-devices-text": "მიანიჭე { count, plural, 1 {1 device} other {# devices} } კლიენტს", + "delete-devices": "წაშალე მოწყობილობები", + "unassign-from-customer": "მოხსენი მოხმარებელს", + "unassign-devices": "მოხსენი მოწყობილოებები", + "unassign-devices-action-title": "მოხსენი { count, plural, 1 {1 device} other {# devices} } მოხმარებელს", + "assign-new-device": "მიამაგრე ახალი მოწყობილობა", + "make-public-device-title": "დარწმუნებული ხართ რომ გინდათ გახადოთ '{{deviceName}}' საჯარო?", + "make-public-device-text": "დადასტურების შემდგომ , მოწყობილობა და ყველა მასთან დაკავშირებული მონაცემები იქნება საჯარო და ხელმისაწვდომი", + "make-private-device-title": "დარწმუნებული ხართ რომ გინდათ შეზღუდოთ წვდომა '{{deviceName}}' თან", + "make-private-device-text": "ყურადღებით , დადასტურების შემდგომ , მოწყობილობა და ყველა მასთან დაკავშირებული მონაცემები არ იქნება ხელმისაწვდომი", + "view-credentials": "მონაცემთა ბაზის ნახვა", + "delete-device-title": "დარწმუნებული ხართ რო გინდათ წაშალოთ მოწყობილობა '{{deviceName}}'?", + "delete-device-text": "ყურადღებით , დადასტურების შემდგომ , მოწყობილობა და ყველა მასთან დაკავშირებული ჩანაწერი არ იქნება ხელმისაწვდომი", + "delete-devices-title": "დარწმუნებული ხართ რო გინდათ წაშალოთ { count, plural, 1 {1 device} other {# devices} }?", + "delete-devices-action-title": "წაშლა { count, plural, 1 {1 device} other {# devices} }", + "delete-devices-text": "ყურადღებით , დადასტურების შემდგომ , მოწყობილობა და ყველა მასთან დაკავშირებული ჩანაწერი არ იქნება ხელმისაწვდომი", + "unassign-device-title": "დარწმუნებული ხართ რო გინდათ გამოიხმოთ '{{deviceName}}'?", + "unassign-device-text": "დადასტურების შემდგომ , მოწყობილობა არ იქნება მომხმარებლისთვის ხელმისაწვდომი", + "unassign-device": "მოწყობილობის გამოხმობა", + "unassign-devices-title": "დარწმუნებული ხართ რო გინდათ გამოიხმოთ { count, plural, 1 {1 device} other {# devices} }?", + "unassign-devices-text": "დადასტურების შემდგომ , მოწყობილობა არ იქნება მომხმარებლისთვის ხელმისაწვდომი", + "device-credentials": "მოწყობილობის სარეგისტრაციო მონაცემები", + "credentials-type": "მომხმარებლის ჩანაწერი", + "access-token": "ტოკენი", + "access-token-required": "ტოკენი სავალდებულოა", + "access-token-invalid": "ტოკენის სიგრძე უნდა იყოს 1 დან 20 სიმბოლომდე", + "rsa-key": "ღია გასაღები RSA", + "rsa-key-required": "ღია გასაღები RSA აუცილებელია", + "secret": "საიდუმლო", + "secret-required": "საიდუმლო აუცილებელია", + "device-type": "მოწყობილობის ტიპი", + "device-type-required": "მოწყობილობის ტიპის სავალდებულოა", + "select-device-type": "აირჩიეთ-მოწყობილობის ტიპი", + "enter-device-type": "შეიყვანეთ მოწყობილობის ტიპი", + "any-device": "ნებისმიერი მოწყობილობა", + "no-device-types-matching": "მოწყობილობის ტიპი რომელიც შეესაბამება '{{entitySubtype}}', არ იძებნება", + "device-type-list-empty": "მოწყობილობის ტიპი არ არის მითითებული", + "device-types": "მოწყობილობის ტიპები", + "name": "სახელი", + "name-required": "სახელი სავალდებულოა", + "description": "აღწერა", + "label": "ნიშნული", + "events": "ივენთი", + "details": "დეტალები", + "copyId": "დააკოპირე მოწყობილობის ID", + "copyAccessToken": "დააკოპირე წვდომის ტოკენი", + "idCopiedMessage": "მოწყობილობის ID დაკოპირებულია", + "accessTokenCopiedMessage": "მოწყობილობის წვდომის ტოკენი დაკოპირებულია", + "assignedToCustomer": "მიმაგრებულია მოხმარებელს", + "unable-delete-device-alias-title": "შეუძლებელია მოწყობილობის ზედმესახელის წაშლა", + "unable-delete-device-alias-text": "მოწყობილობა ზედმესახელით '{{deviceAlias}}' ვერ იშლება რადგან ის გამოიყენება მომდევნო ვიჯეტში
{{widgetsList}}", + "is-gateway": "არის კარიბჭე", + "public": "საჯარო", + "device-public": "მოწყობილობა საჯაროა", + "select-device": "აირჩიეთ მოწყობილობა", + "import": "იმპორტირებული მოწყობილობა", + "device-file": "მოწყობილობის ფაილი", + "search": "მოწყობილობების ძიება", + "selected-devices": "{ count, plural, 1 {1 device} other {# devices} } არჩეულია" + }, + "dialog": { + "close": "დახუურე დიალოგი" + }, + "direction": { + "column": "სვეტი", + "row": "რიგი" + }, + "error": { + "unable-to-connect": "ვერ ვუკავშირდები სერვერს! გთხოვთ შეამოწმოთ ინტერნეტ კავშირი.", + "unhandled-error-code": "მოსაგვარებელი პრობლემის კოდი: {{errorCode}}", + "unknown-error": "უცნობი შეცდომა" + }, + "entity": { + "entity": "სუბიექტი", + "entities": "სუბიექტები", + "aliases": "სუბიექტების ზედმესახელები", + "entity-alias": "სუბიექტის ზედმეტსახელი", + "unable-delete-entity-alias-title": "ვერ მოხერხდა სუბიექტის ზედმესახელის წაშლა", + "unable-delete-entity-alias-text": "სუბიექტის ზედმესახელი '{{entityAlias}}' ვერ წაიშლება რადგან მას იყენებს მომდევნო ვიჯეტი:
{{widgetsList}}", + "duplicate-alias-error": "ნაპოვნია დუბლიკატი ზედმესახელი '{{alias}}'.
ობიქტის ზედმესახელი უნდა იყოს უნიკალური დეშბორდის მასშტაბით.", + "missing-entity-filter-error": "ფილტრი აკლია ზედმესახელისთვის: '{{alias}}'.", + "configure-alias": "დააყენე '{{alias}}' ზედმესახელი", + "alias": "ზედმესახელი", + "alias-required": "ობიექტის ზედმესახელი სავალდებულოა", + "remove-alias": "წაშალე ობიექტის ზედმესახელი", + "add-alias": "დაამატე ობიექტის ზედმესახელი", + "entity-list": "ობიექტის სია", + "entity-type": "ობიექტის ტიპი", + "entity-types": "ობიექტის ტიპები", + "entity-type-list": "ობიექტის ტიპის სია", + "any-entity": "ნებისმიერი ობიექტი", + "enter-entity-type": "შეიყვანეთ ობიექტის ტიპი", + "no-entities-matching": "შემდგომი ობიექტი '{{entity}}' არ მოიძებნა.", + "no-entity-types-matching": "შემდგომი ობიექტის ტიპი '{{entityType}}' არ მოიძებნა.", + "name-starts-with": "სახელი იწყება", + "use-entity-name-filter": "გამოიყენე ფილტრი", + "entity-list-empty": "ობიექტი არ არის არჩეული", + "entity-type-list-empty": "ობიექტის ტიპი არ არის არჩეული", + "entity-name-filter-required": "ობიექტის სახელის ფილტრი სავალდებულოა", + "entity-name-filter-no-entity-matched": "ობიექტები რომბლებიც იწყება '{{entity}}' -ით არ იქნა ნაპოვნი", + "all-subtypes": "ყველა", + "select-entities": "აირჩიე ობიექტები", + "no-aliases-found": "ზედმეტსახელები არ არის ნაპოვნი", + "no-alias-matching": "'{{alias}}' არ არის ნაპოვნი", + "create-new-alias": "შექმენი ახალი!", + "key": "გასაღები", + "key-name": "გასაღების სახელი", + "no-keys-found": "გასარები არ არის ნაპოვნი", + "no-key-matching": "'{{key}}' არ არის ნაპოვნი.", + "create-new-key": "შექმნა ახალი გასაღები", + "type": "ტიპი", + "type-required": "ობიექტის ტიპი სავალდებულოა", + "type-device": "მოწყობილობა", + "type-devices": "მოწყობილობები", + "list-of-devices": "{ count, plural, 1 {One device} other {List of # devices} }", + "device-name-starts-with": "მოწყობილობები რომლების სახელიც იწყება '{{prefix}}' -ით", + "type-asset": "აქტივი", + "type-assets": "აქტივები", + "list-of-assets": "{ count, plural, 1 {ერთი აქტიობა} other {სია შემდეგი აქტიობები} }", + "asset-name-starts-with": "აქტიობები, რომელიც იწყება '{{prefix}}' ით", + "type-entity-view": "წარმოდგენილი ობიექტი", + "type-entity-views": "წარმოდგენილი ობიექტები", + "list-of-entity-views": "{ count, plural, 1 {ერთი ობიექტი} other {სია შემდეგი ობიექტებიდან} }", + "entity-view-name-starts-with": "ობიექტი, რომელიც იწყება '{{prefix}}' ით", + "type-rule": " წესი", + "type-rules": " წესები", + "list-of-rules": "{ count, plural, 1 {ერთი წესი} other {სია შემდეგი წესებისგან} }", + "rule-name-starts-with": "წესი, ვისი სახელიც იწყება '{{prefix}}' ით", + "type-plugin": "პლაგინი", + "type-plugins": "პლაგინები", + "list-of-plugins": "{ count, plural, 1 {ერთი პლაგინი} other {სია შემდეგი პლაგინებისგან} }", + "plugin-name-starts-with": "პლაგინი ვისი სახელიც იწყება '{{prefix}}' ით", + "type-tenant": "მეპატრონე", + "type-tenants": "მეპატრონეები", + "list-of-tenants": "{ count, plural, 1 {ერთი მომხმარებელი} other {სია შემდეგი მომხმარებლებისგან} }", + "tenant-name-starts-with": "მომხმარებლები ვისი სახელიც იწყება '{{prefix}}' ით", + "type-customer": "მომხმარებელი", + "type-customers": "მომხმარებლები", + "list-of-customers": " { count, plural, 1 {ერთი მომხმარებელი} other {სია შემდეგი მომხმარებლებისგან} }", + "customer-name-starts-with": "მომხმარებლები ვისი სახელიც იწყება '{{prefix}}' ით", + "type-user": "მომხმარებელი", + "type-users": "მომხმარებლები", + "list-of-users": "მომხმარებელთა სია { count, plural, 1 {ერთი მომხმარებელი} other {სია შემდეგი მომხმარებლებისგან} }", + "user-name-starts-with": "მომხმარებლების ჯგუფი რომლის სახელებიც იწყება '{{prefix}}' ით", + "type-dashboard": "დეშბორდი", + "type-dashboards": "დეშბორდები", + "list-of-dashboards": "{ count, plural, 1 {დეშბორდი} other {დეშბორდების სია} }", + "dashboard-name-starts-with": "დეშბორდები რომლების სახელებიც იწყება '{{prefix}}' -ით", + "type-alarm": "განგაში", + "type-alarms": "განგაშები", + "list-of-alarms": "{ count, plural, 1 {ერთი განგაში} other {განგაშის სია} }", + "alarm-name-starts-with": "განგაშები რომლების სახელებიც იწყება '{{prefix}}' -ით", + "type-rulechain": "წესების ჯაჭვი", + "type-rulechains": "წესების ჯაჭვები", + "list-of-rulechains": "{ count, plural, 1 {ერთი წესების ჯაჭვი} other {წესების ჯაჭვის სია} }", + "rulechain-name-starts-with": "წესების ჯაჭვები რომელთა სახელებიც იწყება '{{prefix}}' -ით", + "type-rulenode": "წესების ნოუდი", + "type-rulenodes": "წესების ნოუდები", + "list-of-rulenodes": "{ თვლა, plural, 1 {ერთი წესების ნოუდი} other {წესების ნოდების სია} }", + "rulenode-name-starts-with": "წესების ნოუდები რომლების სახელებიც იწყება '{{prefix}}' -ით", + "type-current-customer": "არსებული მომხმარებელი", + "search": "ობიექტის ძიება", + "selected-entities": "{ count, plural, 1 {1 ობიექტი} other {# ობიექტები} } არჩეულია", + "entity-name": "ობიექტის სახელი", + "entity-label": "ობიექტის ეტიკეტი", + "details": "ობიექტის დეტალები", + "no-entities-prompt": "ობიექტები არ მოიძებნა", + "no-data": "მონაცემები არ არის", + "columns-to-display": "სვეტების ჩვენება" + }, + "entity-field": { + "created-time": "შექმნის დრო", + "name": "სახელი", + "type": "ტიპი", + "first-name": "სახელი", + "last-name": "გვარი", + "email": "ელ.ფოსტა", + "title": "დასახელება", + "country": "ქვეყანა", + "state": "დაბა/რეგიონი", + "city": "ქალაქი", + "address": "მისამართი", + "address2": "მისამართი 2", + "zip": "ზიპ კოდი", + "phone": "ტელეფონი", + "label": "ნიშნული" + }, + "entity-view": { + "entity-view": "წარმოდგენილი ობიექტი", + "entity-view-required": "წარმოდგენილი ობიექტი სავალდებულოა", + "entity-views": "წარმოდგენილი ობიექტი", + "management": "წარმოდგენილი ობიექტის მართვა", + "view-entity-views": "წარმოდგენილი ობიექტის ნახვა", + "entity-view-alias": "ობიექტის წამოქმნის ზედმეტსახელი ", + "aliases": "ობიექტის წამოქმნის ზედმეტსახელი არ იძებნება", + "no-alias-matching": "ზედმეტსახელი '{{alias}}' არ იძებნება", + "no-aliases-found": "ზედმეტსახელი არ იძებნება", + "no-key-matching": "გასაღები '{{key}}' არ მოიძებნა", + "no-keys-found": "გასაღები არ მოიძებნა", + "create-new-alias": "ახალი სინონიმის შექმნა", + "create-new-key": "ახალი გასაღების შექმნა", + "duplicate-alias-error": "ნაპოვნია ზედმესახელის დუბლიკატი '{{alias}}'.
ერთეული დაშბორდის პირობებში , წარმოდგენილი ობიექტის ზედმესახელი უნდა იყოს უნიკალური", + "configure-alias": "დააყენე ზედმეტსახელი '{{alias}}'", + "no-entity-views-matching": "ზწდმეტსახელის შესაბამისი ობიექტია '{{alias}}' არ იძებნება", + "alias": "ზედმეტსახელი", + "alias-required": "ობიექტის აღმნიშვნელი ზედმეტსახელი სავალდებულოა", + "remove-alias": "ობიექტის აღმნიშვნელი ზედმეტსახელის მოშორება", + "add-alias": "ობიექტის აღმნიშვნელი ზედმეტსახელის დამატება", + "name-starts-with": "ობიექტის აღმნიშვნელი ზედმეტსახელი რომლიც იწყება ", + "entity-view-list": "წარმოდგენილი ობიექტების სია", + "use-entity-view-name-filter": "ფილტრის გამოყენება", + "entity-view-list-empty": "წარმოდგენილი ობიექტების ცარიელი სია", + "entity-view-name-filter-required": "წარმოდგენილი ობიექტების ფილტრი დასახელებით სავალდებულოა", + "entity-view-name-filter-no-entity-view-matched": "წარმოდგენილი ობიექტები რომელთა დასახელება იწყება '{{entityView}}' ით არ იძებნება", + "add": "წარმოდგენილი ობიექტები", + "assign-to-customer": "დავალება მომხმარებელს", + "assign-entity-view-to-customer": "დავალებათა ერთობა მომხმარებლისთვის", + "assign-entity-view-to-customer-text": "აირჩიეთ წარმოდგენილი ობიექტები, რომლებიც კლიენტებისთვისაა", + "no-entity-views-text": "წარმოდგენილი ობიექტები არ იძებნება", + "assign-to-customer-text": "აირჩიეთ მომხმარებელი რომლისთვისაც საჭიროა წარმოდგენილი ობიექტები, ", + "entity-view-details": " წარმოდგენილი ობიექტების დეტალები", + "add-entity-view-text": " წარმოდგენილი ობიექტების დამატება", + "delete": "წარმოდგენილი ობიექტების წაშლა", + "assign-entity-views": "წარმოდგენილი ობიექტების დამატება", + "assign-entity-views-text": "მომხმარებლის { count, plural, 1 {1 წარმოდგენილი ობიექტები} other {# წარმოდგენილი ობიექტები} }", + "delete-entity-views": "წარმოდგენილი ობიექტების წაშლა", + "unassign-from-customer": "მომხმარებლისდან გამოხმობა", + "unassign-entity-views": "წარმოდგენილი ობიექტების გამოხმობა", + "unassign-entity-views-action-title": "გამოხმობა მომხმარებლის { count, plural, 1 {1 წარმოდგენილი ობიექტები} other {# წარმოდგენილი ობიექტები} }", + "assign-new-entity-view": "ახალი წარმოდგენილი ობიექტები", + "delete-entity-view-title": "ნამდვილათ გინდათ წარმოდგენილი ობიექტების წაშლა '{{entityViewName}}'?", + "delete-entity-view-text": "ყურადღება! თანხმობის შემთხვევაში ობიექტის ჯგუფი და ყველა შესაბამისი ინფორმაცია არ დაექვემდებარება აღდგენას", + "delete-entity-views-title": "დარწმუნებული ხართ რომ გინდათ წაშალოთ { count, plural, 1 {1 წარმოდგენილი ობიექტები} other {# წარმოდგენილი ობიექტები} }?", + "delete-entity-views-action-title": " წაშალა { count, plural, 1 {1 წარმოდგენილი ობიექტები} other {# წარმოდგენილი ობიექტები} }?", + "delete-entity-views-text": "ყურადღება! თანხმობის შემთხვევაში ობიექტის ჯგუფი და ყველა შესაბამისი ინფორმაცია არ დაექვემდებარება აღდგენას", + "unassign-entity-view-title": "დარწმუნებული ხართ რომ გინდათ გამოიხმოთ წარმოდგენილი ობიექტები '{{entityViewName}}'?", + "unassign-entity-view-text": "ყურადღება! თანხმობის შემთხვევაში ობიექტის ჯგუფი და ყველა შესაბამისი ინფორმაცია მომხმარებლისთვის იქნება მიუწვდომელი", + "unassign-entity-view": "წარმოდგენილი ობიექტების გამოხმობა", + "unassign-entity-views-title": "დარწმუნებული ხართ რომ გინდათ გამოიხმოთ { count, plural, 1 {1 წარმოდგენილი ობიექტები} other {# წარმოდგენილი ობიექტები} }?", + "unassign-entity-views-text": "თანხმობის შემთხვევაში ობიექტის ჯგუფი და ყველა შესაბამისი ინფორმაცია მომხმარებლისთვის იქნება მიუწვდომელი", + "entity-view-type": "წარმოდგენილი ობიექტების ტიპი", + "entity-view-type-required": "წარმოდგენილი ობიექტების ტიპი აუცილებელია", + "select-entity-view-type": "აირჩიეთ წარმოდგენილი ობიექტების ტიპი", + "enter-entity-view-type": "შეიყვანეთ წარმოდგენილი ობიექტების ტიპი", + "any-entity-view": "ნებისმიერი წარმოდგენილი ობიექტები", + "no-entity-view-types-matching": "წარმოდგენილი ობიექტების ტიპი '{{entitySubtype}}' არ იძებნება", + "entity-view-type-list-empty": "წარმოდგენილი ობიექტების ტიპი არ იძებნება", + "entity-view-types": "წარმოდგენილი ობიექტების ტიპი ", + "name": "სახელი", + "name-required": "სახელი სავალდებულოა", + "description": "აღწერა", + "events": "ივენთი", + "details": "დეტალები", + "copyId": "წარმოდგენილი ობიექტების ID ის კოპირება", + "idCopiedMessage": "idCopiedMessage", + "assignedToCustomer": "დანიშნულება მომხმარებლის ", + "unable-entity-view-device-alias-title": "ვერ ხერხდება წარმოდგენილი ობიექტების ზედმეტსახელის წაშლა", + "unable-entity-view-device-alias-text": "ვერ ხერხდება წარმოდგენილი ობიექტების ზედმეტსახელის წაშლა '{{entityViewAlias}}', რადგანაც გამოიყენება შემდეგი ვიჯეტებით
{{widgetsList}}", + "select-entity-view": "წარმოდგენილი ობიექტების შერჩევა", + "make-public": "წარმოდგენილი ობიექტების ღია წვდომა", + "make-private": "ერთეულის ხედის დამალვა", + "start-date": "დაწყების თარიღი", + "start-ts": "დაწების დრო", + "end-date": "დასრულების თარიღი", + "end-ts": "დასრულების დრო", + "date-limits": "დროის ლიმიტი", + "client-attributes": "კლიენტ-ატრიბუტები", + "shared-attributes": "საერთო ატრიბუტები", + "server-attributes": "სერვერის ატრიბუტები", + "timeseries": "ტელემეტრია", + "client-attributes-placeholder": "მომხმარებლის ატრიბუტები", + "shared-attributes-placeholder": "ზოგადი ატრიბუტები", + "server-attributes-placeholder": "სერვერის ატრიბუტები", + "timeseries-placeholder": "ტელემეტრია", + "target-entity": "მიზნობრივი ობიექტი", + "attributes-propagation": "ატრიბუტები-გამრავლების", + "attributes-propagation-hint": "ერთეულის ხედი აუტომატურად დააკოპირებს მითითებულ ატრიბუტებს სამიზნე ატრიბუტებიდან ყოველთვის როდესაც განაახლებთ ან შეინახავთ ამ ერთეულის ხედს. წარმოდობის მიზნებიდან გამომდინარე სამიზნე ერთეულის ხედი არ გავრცელდება სათითაო ატრიბუტებზე ყოველი ცვლილების დროს. თქვენ შეძლებთ ჩართოთ ავტომატური გავრცელება \"ხედის დაკოპირება\"-ს წესის კონფიგურირებით თქვენს წესების ჯაჭვში \"ატრიბუტების დაპოსტვის\" და \"ატრიბუტების განახლება\" შეტყობინებების ახალი წესების კვანძში.", + "timeseries-data": "ტელემეტრიის მონაცემები", + "timeseries-data-hint": "მიზნობრივი ობიექტის ტელემეტრიის მონაცემების გასაღების დაყენება, რომელიც ხელმისაწვდომია აღნიშნული ობიექტის , საკითხავი ინფორმაცია", + "make-public-entity-view-title": "make-public-ერთეულის ხედი-სათაური", + "make-public-entity-view-text": "make-public- ერთეულის ხედვის ტექსტი", + "make-private-entity-view-title": "make-private- პირი-ხედი-სათაური", + "make-private-entity-view-text": "make-private- პირი-ხედვა-ტექსტი", + "search": "ძებნა", + "selected-entity-views": "შერჩეული ერთეულის შეხედულებები" + }, + "event": { + "event-type": "ღონისძიების ტიპი", + "type-error": "შეცდომა", + "type-lc-event": "საციცოცხლო ციკლის მოვლენა", + "type-stats": "სტატისტიკა", + "type-debug-rule-node": "დებაგი", + "type-debug-rule-chain": "დებაგები", + "no-events-prompt": "მოვლენა არ იძებნება", + "error": "შეცდომა", + "alarm": "განგაში", + "event-time": "ივენთის დრო", + "server": "სერვერი", + "body": "სხეული", + "method": "მეთოდი", + "type": "ტიპი", + "entity": "ობიექტი", + "message-id": "მესიჯის-ID", + "message-type": "მესიჯის ტიპი", + "data-type": "მონაცემთა ტიპი", + "relation-type": "ურთიერთობის ტიპი", + "metadata": "მეტამონაცემები", + "data": "მონაცემები", + "event": "ივენთი", + "status": "სტატუსი", + "success": "წარმატება", + "failed": "ვერ მოხერხდა", + "messages-processed": "შეტყობინებების დამუშავება", + "errors-occurred": "შეცდომები მოხდა" + }, + "extension": { + "extensions": "დამატებითი აპი", + "selected-extensions": "{ count, plural, 1 {1 დამატებითი აპი} other {# დამატებითი აპიები} } selected", + "type": "ტიპი", + "key": "გასაღები", + "value": "მნიშვნელობა", + "id": "ID", + "extension-id": "დამატებიტი-აპი-ID", + "extension-type": "დამატებითი აპის ტიპი", + "transformer-json": "JSON", + "unique-id-required": "ეს დამატებითი აპის ID უკვე არსებობს", + "delete": "დამატებითი აპის წაშლა", + "add": "დამატებითი აპის დამატება", + "edit": "დამატებითი აპის რედაქტირება", + "delete-extension-title": "დარწმუნებული ხართ რომ გინდათ წაშალოთ დამატებითი აპი '{{extensionId}}'?", + "delete-extension-text": "ყურადღება, თანხმობი შემდეგ დამატებითი აპი და ყველა მასთან დაკავშირებული ინფორმაცია სამუდამოდ წაიშლება", + "delete-extensions-title": "დარწმუნებული ხართ რომ გინდათ წაშალოთ { count, plural, 1 {1 დამატებითი აპი} other {# დამატებითი აპები} }?", + "delete-extensions-text": "ყურადღებით, თანხმობის შემდეგ ყველა დამატებითი აპი წაიშლება", + "converters": "გადამყვანები", + "converter-id": "გადამყვანის-ID", + "configuration": "კონფიგურაცია", + "converter-configurations": "გადამყვანის-კონფიგურაცია", + "token": "უსაფღთხოების ტოკენი", + "add-converter": "კონვერტორის დამატება", + "add-config": "კონვერტორის კონფიგურაციის დამატება", + "device-name-expression": "მოწყობილობა-სახელი-გამოხატვა", + "device-type-expression": "მოწყობილობის ტიპის გამოხატვა", + "custom": "დაკვეთით", + "to-double": "გაორმაგდება", + "transformer": "ტრანსფორმატორი", + "json-required": "ტრანსფორმატორის json– სავალდებულოა", + "json-parse": "ტრანსფორმატორის json -ის წაკითხვა შუძლებელია", + "attributes": "ატრიბუტები", + "add-attribute": "ატრიბუტის დამატება", + "add-map": "დაამატე მაპინგ ელემენტი", + "timeseries": "დროის სერიები", + "add-timeseries": "დროის სერიების დამატება", + "field-required": "ველი სავალდებულოა", + "brokers": "ბროკერები", + "add-broker": "ბროკერის დამატება", + "host": "მასპინძელი", + "port": "პორტი", + "port-range": "პროტი უნდა იყოს მომდევნო დიაპაზონში 1 დან 65535", + "ssl": "SSL", + "credentials": "ავტორიზაციის ინფორმაცია", + "username": "მომხმარებლის სახელი", + "password": "პაროლი", + "retry-interval": "ცდა-ინტერვალი მილიწამებში", + "anonymous": "ანონიმური", + "basic": "ძირითადი", + "pem": "PEM", + "ca-cert": "ca-cert", + "private-key": "Private key ფაილი", + "cert": "სერტიფიკატ ფაილი", + "no-file": "ფაილი არ არის არჩეული", + "drop-file": "ჩააგდეთ ფაილი ან დააჭირეთ ფაილის ასატვირთად", + "mapping": "მაპინგი", + "topic-filter": "თემის ფილტრი", + "converter-type": "გადამყვანის ტიპის", + "converter-json": "JSON", + "json-name-expression": "მოწყობილობის სახელი json გამოხატულება", + "topic-name-expression": "მოწყობილობის სახელი topic გამოხატულება", + "json-type-expression": "მოწყობილობის ტიპი json გამოხატულება", + "topic-type-expression": "მოწყობილობის ტიპი json გამოხატულება", + "attribute-key-expression": "ატრიბუტ გასღების გამოხატვა", + "attr-json-key-expression": "ატრიბუტ გასაღები json გამოხატვა", + "attr-topic-key-expression": "ატრიბუტ გასაღები topic გამოხატვა", + "request-id-expression": "მოთხოვნის ID გამოხატვა", + "request-id-json-expression": "მოთხოვნის ID JSON გამოხატვა", + "request-id-topic-expression": "მოთხოვნის ID TOPIC გამოხატვა", + "response-topic-expression": "პასუხი TOPIC გამოხატვა", + "value-expression": "მნიშვნელობის გამოხატვა", + "topic": "თემა", + "timeout": "დროის ამოწურვა მილიწამებში", + "converter-json-required": "გადამყვანი-json სავალდებულოა", + "converter-json-parse": "კონვერტორი json -ის წაკითხვა შუძლებელია", + "filter-expression": "ფილტრაცია", + "connect-requests": "დაკავშირების მოთხოვნა", + "add-connect-request": "მოწყობილობის გათიშვის მოთხოვნის დამატება", + "disconnect-requests": "მოწყობილობის გათიშვის მოთხოვნა", + "add-disconnect-request": "მოწყობილობის გათიშვის მოთხოვნა დამატება", + "attribute-requests": "მოთხოვნები ატრიბუტებისთვი", + "add-attribute-request": "ატრიბუტების მოთხოვნის დამატება", + "attribute-updates": "ატრიბუტების განახლება", + "add-attribute-update": "ატრიბუტების დამატების განახლება", + "server-side-rpc": "სერვერი RPC", + "add-server-side-rpc-request": "rpc სერვერის დამატება", + "device-name-filter": "მოწყობილობის სახელის ფილტრი", + "attribute-filter": "ფილტრი ატრიბუტებისათვის ", + "method-filter": " პროცესების ფილტრი", + "request-topic-expression": "მოთხოვნა-თემის გამოხატვა", + "response-timeout": "პასუხების დაყოვნების დრო მილიწამებში", + "topic-expression": "თემების დამომხატველი დასახელება", + "client-scope": "კლიენტის მასშტაბი", + "add-device": "მოწყობილობის დამატება", + "opc-server": "opc სერვერი", + "opc-add-server": "დაამატეთ სერვერი", + "opc-add-server-prompt": "გთხოვთ დაამატეთ სერვერი", + "opc-application-name": "opc- აპლიკაციის დასახელება", + "opc-application-uri": "uri აპლიკაცია", + "opc-scan-period-in-seconds": "სკანირების სიხშირე წამში", + "opc-security": "opc- უსაფრთხოება", + "opc-identity": "opc- ინდენთიფიკაცია", + "opc-keystore": "გასაღებების საცავი", + "opc-type": "opc ტიპი", + "opc-keystore-type": "opc-keystore ტიპი", + "opc-keystore-location": "opc-keystore-ადგილმდებარეობა", + "opc-keystore-password": "opc-keystore-პაროლი", + "opc-keystore-alias": "დამატებითი დასახელება", + "opc-keystore-key-password": "opc-keystore-key-პაროლი", + "opc-device-node-pattern": "opc- მოწყობილობა-კვანძი", + "opc-device-name-pattern": "მოწყობილობის პატერრ დასახელება", + "modbus-server": "სერვერი / მოწყობილობა", + "modbus-add-server": "სერვერის დამატება/მოწყობილობა", + "modbus-add-server-prompt": "სერვერის დამატება/მოწყობილობა", + "modbus-transport": "modbus-transport", + "modbus-tcp-reconnect": "კავშირის ავტომატური აღდგენა", + "modbus-rtu-over-tcp": "modbus-rtu-over-tcp", + "modbus-port-name": "თანმემდევრული პორტის დასახელება", + "modbus-encoding": "სიმბოლოების კოდირება", + "modbus-parity": " პარიტეტი", + "modbus-baudrate": "გადაცემის სიჩქარე", + "modbus-databits": "ბიტების ბაზა", + "modbus-stopbits": "modbus-stopbits", + "modbus-databits-range": "პარამეტრი databits იყენებს მნიშვნელს 7 ან 8", + "modbus-stopbits-range": "პარამეტრი stopbits იყენებს მნიშვნელს 1 ან 2", + "modbus-unit-id": "ID მოწყობილობა", + "modbus-unit-id-range": "ID მოწყობილობის დიაპაზონი 1 დან 247 მდე", + "modbus-device-name": "მოწყობილობის სახელი", + "modbus-poll-period": "გამოკითხვის სიხშირე (მილიწამებში)", + "modbus-attributes-poll-period": "ატრიბუტების გამოკითხვის სიხშირე (მილიწამები)", + "modbus-timeseries-poll-period": "ტელემეტრიის გამოკითხვის სიხშირე ( მილიწამები)", + "modbus-poll-period-range": "ტელემეტრიისთვის სავალდებულო გამოკითხვის სიხშირე უნდა იყოს ნულზე მეტი", + "modbus-tag": "modbus-tag", + "modbus-function": "modbus- ფუნქცია", + "modbus-register-address": "რეგისტრაციის მისამართი", + "modbus-register-address-range": "რეგისტრაციის მისამართი უნდა იყოს 0 დან 65535", + "modbus-register-bit-index": "ბიტის ნომერი", + "modbus-register-bit-index-range": "modbus-Register-bit-index-range", + "modbus-register-count": "რეგისტრების რაოდენობა", + "modbus-register-count-range": "დარეგისტრირებულების რაოდენობა ნოლზე მეტი", + "modbus-byte-order": "ბაიტების წყობა", + "sync": { + "status": "სტატუსი", + "sync": "დასინქრონილდა", + "not-sync": "არ დასინქრონილდა", + "last-sync-time": "ბოლო სინქრონიზაციის დრო", + "not-available": "მიუწვდომელია" + }, + "export-extensions-configuration": " გაფართოებების კონფიგურაციის ექსპორტი", + "import-extensions-configuration": "გაფართოებების კონფიგურაციის იმპორტი", + "import-extensions": "გაფართოების იმპორტი", + "import-extension": "გაფართოების იმპორტი", + "export-extension": " გაფართოების ექსპორტი", + "file": "ფაილი", + "invalid-file-error": " ფაილის არასწორი ფორმატი" + }, + "fullscreen": { + "expand": "გაფართოება ეკრანზე", + "exit": "გასასვლელი", + "toggle": "გადართეთ მთლიან ეკრანზე", + "fullscreen": "სრულ ეკრანზე" + }, + "function": { + "function": "ფუნქცია" + }, + "grid": { + "delete-item-title": "დარწმუნებული ხართ რომ გინდათ წაშალოთ წარმოდგენილი ობიექტები", + "delete-item-text": "ყურადღება! თანხმობის შემთხვევაში ობიექტის ჯგუფი და ყველა შესაბამისი ინფორმაცია არ დაექვემდებარება აღდგენას", + "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": "ობიექტი არ იძებნება", + "item-details": "ობიექტის დეტალები", + "delete-item": "ობიექტის წაშლა", + "delete-items": "ობიექტების წაშლა", + "scroll-to-top": "ზემოთ დაბრუნება" + }, + "help": { + "goto-help-page": "დახმარების გვერდზე გადასვლა" + }, + "home": { + "home": "მთავარი", + "profile": "პროფილი", + "logout": "გამოსვლა", + "menu": "მენიუ", + "avatar": "ავატარი", + "open-user-menu": "გახსენი მომხმარებლის მენიუ" + }, + "import": { + "no-file": "აირჩიეთ ფაილი", + "drop-file": "ჩააგდეთ JSON ფაილი ან დააჭირეთ ფაილის ასატვირთად", + "drop-file-csv": "ჩააგდეთ CSV ფაილი ან დააჭირეთ ფაილის ასატვირთად", + "column-value": "მნიშვნელობა", + "column-title": "სათაური", + "column-example": "მაგალითი ინფორმაციის მნიშნველობის", + "column-key": "ატრიბუტ/ტელემენტარი გასარები", + "csv-delimiter": "CSV დელიმიტერი", + "csv-first-line-header": "პირველი ხაზი შეიცავს სვეტის სახელებს", + "csv-update-data": "განაახლე ატრიბუტ/ტელემენტარი", + "import-csv-number-columns-error": "ფაილი უნდა შეიცავდეს მინიმუმ 2 სვეტს", + "import-csv-invalid-format-error": "არასწორი ფაილის ფორმატი. ხაზი: '{{line}}'", + "column-type": { + "name": "სახელი", + "type": "ტიპი", + "label": "იარლიყი", + "column-type": "სვეტის ტიპი", + "client-attribute": "კლიენტ-ატრიბუტი", + "shared-attribute": "საერთო-ატრიბუტი", + "server-attribute": "სერვერის ატრიბუტი", + "timeseries": "დროის სერიები", + "entity-field": "ობიექტის ველი", + "access-token": "წვდომის ტოკენი" + }, + "stepper-text": { + "select-file": "აირჩიე ფაილი", + "configuration": "დააიმპორტე კონფიგურაცია", + "column-type": "აირჩიე სვეტის ტიპი", + "creat-entities": "იქმნება ახალი ობიექტები", + "done": "შესრულებულია" + }, + "message": { + "create-entities": "{{count}} ახალი ობიექტები წარმატებით შეიქმნა.", + "update-entities": "{{count}} ობიექტები წარმატებით განახლდა.", + "error-entities": "მოხდა შეცდომა {{count}} ობიექტების შექმნისას" + } + }, + "item": { + "selected": "შერჩეული" + }, + "js-func": { + "no-return-error": "ფუნქცია უნდა აბრუნებდეს მნიშნველობას!", + "return-type-mismatch": "'{{type}}' ის დაბრუნების ფუნქცია", + "tidy": "დალაგება" + }, + "key-val": { + "key": "გასაღები", + "value": "მნიშვნელობა", + "remove-entry": "ამოღება", + "add-entry": "დამატება", + "no-data": "მონაცემები არ არის" + }, + "layout": { + "layout": "განლაგება", + "manage": "მართვა", + "settings": "პარამეტრები", + "color": "ფერი", + "main": "მთავარი", + "right": "მარჯვენა", + "select": "შერჩევა" + }, + "legend": { + "direction": "მიმართულება", + "position": "პოზიცია", + "show-max": "მაქსიმალური მნიშვნელის ჩვენება", + "show-min": "მინიმალური მნიშვნელის ჩვენება", + "show-avg": "საშუალო მნიშვნელის ჩვენება", + "show-total": "ფასის ჩვენება", + "settings": "პარამეტრების დაყენება", + "min": "მინ", + "max": "მაქ", + "avg": "საშუალო", + "total": "სულ", + "comparison-time-ago": { + "days": "დღის წინ", + "weeks": "კვირის წინ", + "months": "თვის წინ", + "years": "1 წლის წინ" + } + }, + "login": { + "login": "შესვლა", + "request-password-reset": "პაროლის გადატვირთვის მოთხოვნა", + "reset-password": "პაროლის გადატვირთვა", + "create-password": "პაროლის შექმნა", + "passwords-mismatch-error": "პაროლები არ ემთხვევა", + "password-again": "შეიყვანეთ პაროლი თავიდა", + "sign-in": "სისტემაში შესვლა", + "username": "მომხმარებლის სახელი", + "remember-me": "დამახსოვრება", + "forgot-password": " დაგავიწყდა პაროლი?", + "password-reset": "პაროლის აღდგენა", + "expired-password-reset-message": "პაროლს ვადა გაუვიდა, გთხოვთ შეიყვანოთ ახალი", + "new-password": "ახალი პაროლი", + "new-password-again": "გაიმეორეთ ახალი პაროლი", + "password-link-sent-message": "პაროლის შეცვლის მოთხოვნა გაიგზავნა", + "email": "ელ.ფოსტა" + }, + "position": { + "top": "ზევით", + "bottom": "ქვედა", + "left": "დარჩა", + "right": "მარჯვნივ" + }, + "profile": { + "profile": "პროფილი", + "last-login-time": "ბოლო შესვლის დრო", + "change-password": "პაროლის შეცვლა", + "current-password": "მიმდინარე პაროლი" + }, + "relation": { + "relations": "ურთიერთობს", + "direction": "მიმართულება", + "search-direction": { + "FROM": "დან", + "TO": "კენ" + }, + "direction-type": { + "FROM": "დან", + "TO": "კენ" + }, + "from-relations": "ურთიერთობებიდან", + "to-relations": "მოთხოვნა", + "selected-relations": "შერჩეული { count, plural, 1 {1 ურთიერთობები } other {#ურთიერთობები} }", + "type": "ტიპი", + "to-entity-type": "ერთეული ობიექტის ტიპისთვის", + "to-entity-name": "პირის სახელი", + "from-entity-type": "ერთეულის ტიპისგან", + "from-entity-name": "ობიექტიდან გამომდინარე", + "to-entity": "ობიექტისადმი", + "from-entity": "ობიექტიდან გამომდინარე", + "delete": "წაშლა", + "relation-type": "ურთიერთობის ტიპი", + "relation-type-required": "აუცილებელი ურთიერთობის ტიპი", + "any-relation-type": "ნებისმიერი ურთიერთობის ტიპის", + "add": "დამატება", + "edit": "რედაქტირება", + "delete-to-relation-title": "ნამდვილათ გსურთ წაშალოთ '{{entityName}}'?", + "delete-to-relation-text": "ყურედღება ! დადასტურების შემდეგ '{{entityName}}' იქნება უკან გამოხმობილი", + "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, plural, 1 {1 ქმედება} other {# ქმედება} }?", + "delete-from-relations-text": "ყურედღება ! დადასტურების შემდეგ არჩეული ობიექტები იქნება უკან გამოხმობილი არსებული ობიექტებიდან", + "remove-relation-filter": "რელაციის ფილტრის მოშორება", + "add-relation-filter": "რელაციის ფილტრის დამატება", + "any-relation": "ნებისმიერი რელაცია", + "relation-filters": "რელაციის ფილტრები", + "additional-info": "დამატებითი ინფორმაცია (JSON)", + "invalid-additional-info": "ვერ ხერხდება დამატებითი ინფორმაციის (JSON) იდან წაკითხვა" + }, + "rulechain": { + "rulechain": "წესების წყობა", + "rulechains": "წესების წყობა", + "root": "ძირეული", + "delete": "წესების წყობის წაშლა", + "name": "სახელი", + "name-required": "სახელი (აუცილებელია", + "description": "აღწერა", + "add": "წესების წყობის დამატება", + "set-root": "წესების წყობის ძირეულად გადაკეთება", + "set-root-rulechain-title": "ნამდვილათ გინდათ '{{ruleChainName}}' წესების წყობის ძირეულად გადაკეთება", + "set-root-rulechain-text": "ყურედღება ! დადასტურების შემდეგ არჩეული წესების წყობა იქნება ძირეული და დაამუშავებს ყველა შემოსულ იმფოს", + "delete-rulechain-title": "ნამდვილათ გსურთ წაშალოთ წესების წყობა '{{ruleChainName}}'?", + "delete-rulechain-text": "ყურედღება ! დადასტურების შემდეგ არჩეული წესების წყობა და მასთან დაკავშირებული ყველა ინფო იქნება წაშლილი", + "delete-rulechains-title": "ნამდვილათ გსურთ წაშალოთ { count, plural, 1 {1 წესების წყობა} other {# წესების წყობა} }?", + "delete-rulechains-action-title": " წაშალა { count, plural, 1 {1 წესების წყობა} other {# წესების წყობა} }?", + "delete-rulechains-text": "ყურედღება ! დადასტურების შემდეგ არჩეული წესების წყობა და მასთან დაკავშირებული ყველა ინფო იქნება წაშლილი", + "add-rulechain-text": "ახალი წესების წყობის ფუნქციონალის დამატება", + "no-rulechains-text": " წესების წყობის ფუნქციონალი არ იძებნება", + "rulechain-details": " წესების წყობის ფუნქციონალის დეტალები", + "details": "დეტალები", + "events": "ივენთი", + "system": "სისტემური", + "import": " წესების წყობის ფუნქციონალის იმპორტი", + "export": " წესების წყობის ფუნქციონალის ექსპორტი", + "export-failed-error": "ვერ ხერხდება წესების წყობის ექსპორტირება {{error}}", + "create-new-rulechain": " ახალი წესების ჯაჭვის შექმნა", + "rulechain-file": "წესების ჯაჭვის ფაილი", + "invalid-rulechain-file-error": "ვერ ხერხდება წესების ჯაჭვის იმპორტირება, არასწორი ფორმატი ", + "copyId": "წესების ჯაჭვის ID მისამართის კოპირება", + "idCopiedMessage": "წესების ჯაჭვის ID მისამართის კოპირება გაცვლით ბუფერში", + "select-rulechain": "წესების ჯაჭვის არჩევა", + "no-rulechains-matching": "წესების ჯაჭვის შესატყვისი '{{entity}}' არ იძებნება", + "rulechain-required": "წესების ჯაჭვი აუცილებელია", + "management": "წესების ჯაჭვის მართვა", + "debug-mode": "გამართვის რეჟიმი" + }, + "rulenode": { + "details": "დეტალები", + "events": "ივენთი", + "search": " წესების ძებნა", + "open-node-library": "წესების ბიბლიოთეკის გახსნა", + "add": "წესების დამატება", + "name": "სახელი", + "name-required": "სახელი (აუცილებელია", + "type": "ტიპი", + "description": "აღწერა", + "delete": "წაშლა", + "select-all-objects": "გამოყავით ყველა წესი და კავშირი", + "deselect-all-objects": "გამოყავით ყველა წესი და კავშირი / გაუქმება", + "delete-selected-objects": "წაშლა/ ყველა წესი და კავშირი", + "delete-selected": "მონიშნულის წაშლა", + "select-all": "მონიშნე ყველა", + "copy-selected": "მონიშნულის კოპირება", + "deselect-all": "გააუქმეთ მონიშვნა", + "rulenode-details": "დეტალები წესებისათვის", + "debug-mode": "გამართვის რეჟიმი", + "configuration": "კონფიგურაცია", + "link": "ბმული", + "link-details": "ბმულთან დაკავშირებული დეტალები", + "add-link": "კავშირის დამატება", + "link-label": "ბმულის იარლიყი", + "link-label-required": "ბმულის იარლიყი/აუცილებელია", + "custom-link-label": "სამომხმარებლო ბმულის იარლიყი", + "custom-link-label-required": "სამომხმარებლო ბმულის იარლიყი აუცილებელია", + "link-labels": "ბმულის იარლიყი", + "link-labels-required": "ბმულის იარლიყი/აუცილებელია", + "no-link-labels-found": "ბმულის იარლიყი არ იძებნება", + "no-link-label-matching": "ბმულის იარლიყი '{{label}}' არ იძებნება", + "create-new-link-label": "ახალი ბმულის იარლიყის შექმნა", + "type-filter": " ფილტრი", + "type-filter-details": "შემოსული იმფოს ფილტრი", + "type-enrichment": "დაშენება", + "type-enrichment-details": "იმფოს დამატება მეტადატაში", + "type-transformation": "ტრანსფორმაცია", + "type-transformation-details": "მეტადატის იმფოს შეცვლა", + "type-action": "ქმედება", + "type-action-details": "დავალების შესრულება", + "type-external": "გარეგანი", + "type-external-details": "გარე სისტემებთან ურთიერრთობა", + "type-rule-chain": "წესების ჯაჭვი", + "type-rule-chain-details": "შემოსული იმფოს გადამისამართება სხვა წესების ჟაჭვით", + "type-input": " შეყვანა", + "type-input-details": "გონივრული შემომავალი წესების ჯაჭვის გადამისამართება შემდეგ დისჩიპლინებათ", + "type-unknown": "უცნობია", + "type-unknown-details": "უცნობი-დეტალები", + "directive-is-not-loaded": "კონფიგის დირექტივა '{{directiveName}}' არ იძებნება", + "ui-resources-load-error": "ui- რესურსების ჩატვირთვის შეცდომა", + "invalid-target-rulechain": "სამიზნე წესების ჯაჭვის გადაწყვეტა შეუძლებელია", + "test-script-function": "სატესტო სკრიფტ ფუნქცია", + "message": "მესიჯი", + "message-type": "მესიჯის ტიპი", + "select-message-type": "აირჩიეთ მესიჯის ტიპი", + "message-type-required": "მესიჯის ტიპი სავალდებულოა", + "metadata": "მეტამონაცემები", + "metadata-required": "მეტამონაცემები ვერ იქნება ცარიელი", + "output": "რეზულტატი", + "test": "ტესტი", + "help": "დახმარება", + "reset-debug-mode": "Debug რეჟიმის გათიშვა ყველა ნოდისთვის" + }, + "tenant": { + "tenant": "ტენანტი", + "tenants": "ტენანტი", + "management": "ტენანტების მართვა", + "add": "ტენანტის დამატება", + "admins": "ადმინისტრატორები", + "manage-tenant-admins": "ტენატ ადმინების მართვა", + "delete": "ტენანტის წაშლა", + "add-tenant-text": "ახალი ტენანტის დამატება", + "no-tenants-text": "ტენანტი ვერ მოიძებნა", + "tenant-details": "ტენანტის დეტალები", + "delete-tenant-title": "დარწმუნებული ხართ რომ გსურთ '{{tenantTitle}}'-ის წაშლა ?", + "delete-tenant-text": "ფრთხილად, დადასტურების შემდეგ ტენანტი და მასთან ასოცირებული მონაცემები იქნება დაკარგული.", + "delete-tenants-title": "დარწმუნებული ხართ რომ გსურთ წაშალოთ { count, plural, 1 {1 ტენანტი} other {# ტენანტი} }?", + "delete-tenants-action-title": "{ count, plural, 1 {1 ტენანტი} other {# ტენანტი} } წაშლა", + "delete-tenants-text": "ფრთხილად, დადასტურების შემდეგ ყველა მონიშნული ტენანტი და მასთან ასოცირებული მონაცემები იქნება დაკარგული.", + "title": "სათაური", + "title-required": "სათაური საჭიროა", + "description": "აღწერა", + "details": "დეტალები", + "events": "ივენთები", + "copyId": "ტენანტის ID-ის კოპირება", + "idCopiedMessage": "ტენანტის ID-ი დაკოპირებული აკლიპბორდში", + "select-tenant": "ტენანტის არჩევა", + "no-tenants-matching": "ტენანტი '{{entity}}' ვერ მოიძებნა.", + "tenant-required": "ტენანტი სავალდებულოა", + "search": "ტენანტის ძებნა", + "selected-tenants": "{ count, plural, 1 {1 ტენანტი} other {# ტენანტი} } მონიშნულია" + }, + "timeinterval": { + "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": "წუთი", + "seconds": "წამი", + "advanced": "დამატებითი" + }, + "timewindow": { + "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": "ბოლო", + "period": "დან {{ startTime }} {{ endTime }} მდე", + "edit": "დროის ფანჯრის რედაქტირება", + "date-range": "თარიღის დიაპაზონი", + "last": "ბოლო", + "time-period": "დროის მონაკვეთი", + "hide": "დამალვა" + }, + "user": { + "user": "მომხმარებელი", + "users": "მომხმარებლები", + "customer-users": "კლიენტის მომხმარებლები", + "tenant-admins": "ტენანტ ადმინები", + "sys-admin": "სისტემური ადმინისტრატორი", + "tenant-admin": "ტენანტ ადმინისტრატორი", + "customer": "მომხმარებელი", + "anonymous": "ანონიმური", + "add": "მომხმარებლის დამატება", + "delete": "მომხმარებლის წაშლა", + "add-user-text": "ახალი მომხმარებლის დამატება", + "no-users-text": "მომხმარებლების ვერ მოიძებნა", + "user-details": "მომხმარებლის დეტალები", + "delete-user-title": "დარწმუნებული ხართ რომ გინდათ '{{userEmail}}' -ის წაშლა?", + "delete-user-text": "ფრთხილად, დადასტურების შემდეგ მომხმარებელი და მასთან ასოცირებული მონაცემები იქნება დაკარგული.", + "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": "აქტივაციის გადაგზავნა", + "email": "ელ.ფოსტა", + "email-required": "ელ.ფოსტა საჭირო", + "invalid-email-format": "არასწორი ელ.ფოსტის ფორმატი", + "first-name": "სახელი", + "last-name": "გვარი", + "description": "აღწერა", + "default-dashboard": "ნაგულისხმევი დეშბორდი", + "always-fullscreen": "ყოველთვის მთელს ეკრანზე", + "select-user": "მომხმარებლის არჩევა", + "no-users-matching": "მომხმარებელი '{{entity}}' ვერ მოიძებნა.", + "user-required": "მომხმარებლი სავალდებულოა", + "activation-method": "აქტივაციის მეთოდი", + "display-activation-link": "აქტვივაციის ბმულის ჩვენება", + "send-activation-mail": "აქტივაციის ელფოსტის გაგზავნა", + "activation-link": "მომხმარებლის აქტივაციის ბმული", + "activation-link-text": "იმისთვის რომ გააქტიუროთ მომხმარებეკი გამოიყენეთ შემდეგი აქტივაციის ბმული :", + "copy-activation-link": "აქტივაციის ბმული დაკოპირება", + "activation-link-copied-message": "აქტივაციის ბმული დაკოპირებულია კლიპბორდში", + "details": "დეტალები", + "login-as-tenant-admin": "შესვლა როგორც ტენანტ ადმინი", + "login-as-customer-user": "შესვლა, როგორც კლიენტის მომხმარებელი", + "search": "მომხმარებლების ძებნა", + "selected-users": "{ count, plural, 1 {1 მომხმარებელი} other {# მომხმარებლები} } მონიშნულია", + "disable-account": "მომხმარებლის ანგარიშის გამორთვა", + "enable-account": "მომხმარებლის ანგარიშის ჩართვა", + "enable-account-message": "მომხმარებლის ანგარიშის წარმატებით ჩაირთო!", + "disable-account-message": "მომხმარებლის ანგარიშის წარმატებით გამოირთო!" + }, + "value": { + "type": "მნიშვნელობის ტიპი", + "string": "სტრინგი", + "string-value": "სტრინგის მნიშვნელობა", + "integer": "მთელი რიცხვი", + "integer-value": "მთელი რიცხვის მნიშვნელობა", + "invalid-integer-value": "არასწორი მთელი რიცხვის მნიშვნელობა", + "double": "ორმაგი", + "double-value": "ორმაგი მნიშვნელობა", + "boolean": "ლოგიკური", + "boolean-value": "ლოგიკური მნიშვნელობა", + "false": "ცრუ", + "true": "ჭეშმარიტი", + "long": "გრძელი" + }, + "widget": { + "widget-library": "ვიჯეტების ბიბლიოთეკა", + "widget-bundle": "ვიჯეტების ნაკრები", + "select-widgets-bundle": "ვიჯედების ნაკრების არჩევა", + "management": "ვიჯეტების მენეჯმენტი", + "editor": "ვიჯეტების რედაქტორი", + "widget-type-not-found": "შეცდომა ვიჯეტის კონფიგურაციის ჩატვირთვისას.
სავარაუდოთ დაკავშირებულია ვიჯეტის ტიოის წაშლასთან.", + "widget-type-load-error": "ვიჯეტი ვერ ჩაიტვირთა შემდეგი შეცდომის გამო:", + "remove": "ვიჯეტის წაშლა", + "edit": "ვიჯეტის რედაქტირება", + "remove-widget-title": "დარწმუნებული ხართ რომ გსურთ წაშალოთ ვიჯეტი '{{widgetTitle}}'?", + "remove-widget-text": "დადასტურების შემდეგ ვიჯეტი და მასთან ასიცირებული მონაცემები იქნება დაკარგული.", + "timeseries": "მონაცემთა სერია", + "search-data": "საძიებო მონაცემები", + "no-data-found": "მონაცემი ვერ მოიძებნა", + "latest-values": "უახლესი მნიშვნელობები", + "rpc": "ვიჯეტის კონტროლი", + "alarm": "ვიჯეტის განგაში", + "static": "სტატიკური ვიჯეტი", + "select-widget-type": "აირჩიეთ ვიჯეტის ტიპი", + "missing-widget-title-error": "ვიჯეტის სატაური უნდა იყოს მითითებული", + "widget-saved": "ვიჯეტი შენახულია", + "unable-to-save-widget-error": "შენახვა შეუძლებელია ვიჯეტის შეცდომა", + "save": "ვიჯეტის შენახვა", + "saveAs": "შეინახე ვიჯეტი როგორც", + "save-widget-type-as": "შეინახე ვიჯეტის ტიპი როგორც", + "save-widget-type-as-text": "შეიყვანეთ ახალი ვიჯეტის სატაური ან/და აირჩიეთ სამიზნე ვიჯეტიბის ნაკრებიდან.", + "toggle-fullscreen": "მთელს ეკრანზე გაშლა", + "run": "ვიჯეტის გაშვება", + "title": "ვიჯეტის სათაური", + "title-required": "ვიჯეტის სატაური საჭიროა.", + "type": "ვიჯეტის ტიპი", + "resources": "რესურსები", + "resource-url": "JavaScript/CSS URL", + "remove-resource": "რესურსის წაშლა", + "add-resource": "რესურსის დამატება", + "html": "HTML", + "tidy": "აკურატული", + "css": "CSS", + "settings-schema": "პარამეტრების სქემა", + "datakey-settings-schema": "მონაცემტა გასაღები პარამეტრების სქემა", + "javascript": "javascript", + "js": "JS", + "remove-widget-type-title": "დარწმუნებული ხართ რომ გსურთ ვიჯეტის ტიპი '{{widgetName}}'?", + "remove-widget-type-text": "დასტურის შემთხვევაში ვიჯეტი და მასთან ასოცირებული მონაცემები დაიკარგება.", + "remove-widget-type": "ვიჯეტის ტიპის ამოღება", + "add-widget-type": "ახალი ვიჯეტის ტიპი", + "widget-type-load-failed-error": "ვიჯეტის ტიპის ჩატვირთვა ვერ მოხერხდა!", + "widget-template-load-failed-error": "ვიჯეტის შაბლონი ჩატვირთვა ვერ მოხერხდა!", + "add": "ვიჯეტის დამატება", + "undo": "ვიჯეტის ცვლილების გაუქმება", + "export": "ვიჯეტის ექსპორტი" + }, + "widget-action": { + "header-button": "ვიჯეტის თავსართის ღილაკი", + "open-dashboard-state": "ახლი დეშბორდის მდგომარეობაზე გადასვლა", + "update-dashboard-state": "მიმდინარე დეშბორდის მდგომარეობის განახლება", + "open-dashboard": "სხვა დეშბორდზე გადასვლა", + "custom": "სხვა მოქმედება", + "custom-pretty": "სხვა მოქმედება (HTML შაბლონით)", + "target-dashboard-state": "სამიზნე დეშბორდის მდგომარეობა", + "target-dashboard-state-required": "სამიზნე დეშბორდის მდგომარეობა საჭიროა", + "set-entity-from-widget": "ობიექტის მიბიჭება ვიჯეტიდან", + "target-dashboard": "სამიზნე დეშბორდი", + "open-right-layout": "დეშბორდის მარჯვენა განლაგების გახსნა (მობილურის ხედით)" + }, + "widgets-bundle": { + "current": "მიმდინარე ნაკრები", + "widgets-bundles": "ვიჯეტების ნაკრები", + "add": "ვიჯეტების ნაკრების დამატება", + "delete": "ვიჯეტების ნაკრების წაშლა", + "title": "სათაური", + "title-required": "სათაური საჭიროა.", + "add-widgets-bundle-text": "ახალი ვიჯეტების ნაკრების დამატება", + "no-widgets-bundles-text": "ვიჯეტების ნაკრები ვერ მოიძებნა", + "empty": "ვიჯეტების ნაკრები ცარიელია", + "details": "დეტალები", + "widgets-bundle-details": "ვიჯეტების ნაკრების დეტალები", + "delete-widgets-bundle-title": "დარწმუნებული ხართ რომ გსურთ ვიჯეტების ნაკრების წაშლა '{{widgetsBundleTitle}}'?", + "delete-widgets-bundle-text": "ფრთხილად, დადასტურების შემდეგ ვიჯეტების ნაკრები და მასთან ასოცირებული მონაცემები იქნება დაკარგული.", + "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": "ვიჯეტის ნაკრები სავალდებულოა.", + "system": "სისტემა", + "import": "ვიჯეტის ნაკრების იმპორტი", + "export": "ვიჯეტის ნაკრების ექსპორტი", + "export-failed-error": "ვიჯეტის ნაკრების ექსპორტი ვერ განხორციელებული შეცდომა: {{error}}", + "create-new-widgets-bundle": "ახალი ვიჯეტის ნაკრების შექმნა", + "widgets-bundle-file": "ვიჯეტებებსი ნაკრების ფაილი", + "invalid-widgets-bundle-file-error": "ვიჯეტის ნაკრების იმპორტი ვერ განხორციელდა: არასწორი სტრუქტურა." + }, + "widget-config": { + "data": "მონაცემები", + "settings": "პარამეტრები", + "advanced": "დამატებითი", + "title": "სათაური", + "title-tooltip": "სათაურის განმარტება", + "general-settings": "ძირითადი პარამეტრები", + "display-title": "სათაურის ჩვენება", + "drop-shadow": "ჩრდილი", + "enable-fullscreen": "ჩართვა მთელს ეკრანზე", + "background-color": "ფონის ფერი", + "text-color": "ტექსტის ფერი", + "padding": "დაშორება", + "margin": "ზღვარი", + "widget-style": "ვიჯეტის სტილი", + "title-style": "სათაურის სტილი", + "mobile-mode-settings": "მობილური რეჟიმის პარამეტრები", + "order": "განლაგება", + "height": "სიმაღლე", + "units": "სპეციალური სიმბოლო შემდეგი მნიშვნელობისთვის", + "decimals": "ციფრების რაოდენობა წერტილის შემდეგ", + "timewindow": "ქრონომეტრაჟი", + "use-dashboard-timewindow": "დეშბორდის ქრონომეტრაჟის გამოყენება", + "display-timewindow": "ქრონომეტრაჟის ჩვენება", + "display-legend": "ლეგენდის ჩვენება", + "datasources": "მონაცემთა წყაროები", + "maximum-datasources": "მაქს. { count, plural, 1 {1 მონცემთა წყარო დაშვებულია.} other {# მონაცემტა წყაროები დაშვებულია} }", + "datasource-type": "ტიპი", + "datasource-parameters": "პარამეტრები", + "remove-datasource": "მონაცემთა წყაროს წაშლა", + "add-datasource": "დაამატეთ მონაცემთა წყარო", + "target-device": "სამიზნე მოწყობილობა", + "alarm-source": "განგაშის წყარო", + "actions": "მოქმედებები", + "action": "მოქმედება", + "add-action": "მოქმედების დამატება", + "search-actions": "საძიებო მოქმედებები", + "action-source": "მოქმედების წყარო", + "action-source-required": "მოქმედების წყარო საჭიროა.", + "action-name": "სახელი", + "action-name-required": "მოქმედების სახელი საჭიროა.", + "action-name-not-unique": "სხვა მოქმედება იგივე სახელით უკვე არსებობს.
მოქმედების სახელი უნდა იყოს უნიკალური ერთი და იგივე მონაცემთა წყაროსთვის.", + "action-icon": "ხატულა", + "action-type": "ტიპი", + "action-type-required": "მოქმედების ტიპი საჭიროა.", + "edit-action": "მოქმედების რედაქტირება", + "delete-action": "მოქმედების წაშლა", + "delete-action-title": "მოქმედების ვიჯეტის წაშლა", + "delete-action-text": "დარწმუნებული ხართ რომ გსურთ წაშალოთ მოწმდებების ვიჯეტი სახელად '{{actionName}}'?", + "display-icon": "სათაურის ხატულას ჩვენება", + "icon-color": "ხატულას ფერი", + "icon-size": "ხატულას ზომა" + }, + "widget-type": { + "import": "ვიჯეტის ტიპის იმპორტი", + "export": "ვიჯეტის ტიპის ექსპორტი", + "export-failed-error": "ვიჯეტის ტიპის ექსპორტი ვერ განხორციელდა: {{error}}", + "create-new-widget-type": "ახალი ვიჯეტისტიპის შექმნა", + "widget-type-file": "ვიჯეტის ტიპის ფაილი", + "invalid-widget-type-file-error": "ვიჯეტის ტიპის იმპორტი ვერ განხორციელდ: არასწირი მონაცემტა სტრუქტურა." + }, + "widgets": { + "date-range-navigator": { + "localizationMap": { + "Sun": "მზე", + "Mon": "ორშ", + "Tue": "სამ", + "Wed": "ოთხ", + "Thu": "ხუთ", + "Fri": "პარ", + "Sat": "შაბ", + "Jan": "იან", + "Feb": "თებ", + "Mar": "მარ", + "Apr": "აპრილი", + "May": "მაისი", + "Jun": "ივნ", + "Jul": "იული", + "Aug": "აგვისტო", + "Sep": "სექტ", + "Oct": "ოქტომბერი", + "Nov": "ნოემბერი", + "Dec": "დეკ", + "January": "იანვარი", + "February": "თებერვალი", + "March": "მარტი", + "April": "აპრილი", + "June": "ივნისი", + "July": "ივლისი", + "August": "აგვისტო", + "September": "სექტემბერი", + "October": "ოქტომბერი", + "November": "ნოემბერი", + "December": "დეკემბერი", + "Custom Date Range": "თარიღის მორგებული ზომა", + "Date Range Template": "თარიღი დიაპაზონის შაბლონი", + "Today": "დღეს", + "Yesterday": "გუშინ", + "This Week": "მიმდინარე კვირა", + "Last Week": "წინა კვირა", + "This Month": "მიმდინარე თვე", + "Last Month": "გასული თვე", + "Year": "წელი", + "This Year": "მიმდინარე წელი", + "Last Year": "გასული წელი", + "Date picker": "თარიღის ამომრჩევი", + "Hour": "საათი", + "Day": "დღე", + "Week": "კვირა", + "2 weeks": "2 კვირა", + "Month": "თვე", + "3 months": "3 თვე", + "6 months": "6 თვე", + "Custom interval": "არჩევითი ინტერვალი", + "Interval": "ინტერვალი", + "Step size": "ნაბიჯის ზომა", + "Ok": "კარგი" + } + }, + "input-widgets": { + "attribute-not-allowed": "პარამეტრის ატრიბუტის ვერ გამოიყენებთ ამ ვიჯეტისთვის", + "blocked-location": "გეოლოკაცია ადაბლოკილია თქვენს ბროუზერში", + "claim-device": "მოწყობილობის გააქტიურება", + "claim-failed": "მოწყობილობის გააქტიურება ვერ მოხერხდა!", + "claim-not-found": "მოწყობილობა ვერ მოიძებნა!", + "claim-successful": "მოწყობილობა გააქტიურდა წარმატებით!", + "date": "თარიღი", + "device-name": "მოწყობილობის სახელი", + "device-name-required": "მოწყობილობის სახელი სავალდებულუა", + "discard-changes": "ცვლილებების გაუქმება", + "entity-attribute-required": "ობიექტის ატრიბუტი სავალდებულოა", + "entity-coordinate-required": "ორივე ველი: გრძედი და განედი აუცილებელია", + "entity-timeseries-required": "ობიექტის თაიმსერია აუცილებელია", + "get-location": "მიმდინაე ადგილმდებარეობის გაგება", + "latitude": "განედი", + "longitude": "გრძედი", + "not-allowed-entity": "მონიშნულ ობიექტს არ გააჩნია გაზიარებადი ატრიბუტები", + "no-attribute-selected": "ატრიბუტებაი არ არის მონიშნული", + "no-datakey-selected": "მონაცემთა გასაღები არ არის მონიშნული", + "no-coordinate-specified": "მონაცემთა გასაღები გრძედ/განედისთვის არ არის მითითებული", + "no-entity-selected": "ობიექტი არ არის მონიშნული", + "no-image": "სურათი არ არის", + "no-support-geolocation": "თქვენ ბროუზერს არ გააჩნია გეოლოკაციის მხარდაჭერა", + "no-support-web-camera": "ვებ-კამერის მიუწვდომელია", + "no-timeseries-selected": "მონაცემტასერია არ არის მონიშნული", + "secret-key": "საიდუმლო გასაღები", + "secret-key-required": "საიდუმლო გასაღები საჭიროა", + "switch-attribute-value": "ობიექტის ატრიბუტის მნიშვნელობის გადართვა", + "switch-camera": "კამერის გადართვა", + "switch-timeseries-value": "ობიექტის მონაცემთა სერიის მნიშვნელობის გართვა", + "take-photo": "ფოტოს გადაღება", + "time": "დრო", + "timeseries-not-allowed": "მონაცემთა სერიის პარამეტრი ვერ გააქტიურდება ამ ვიჯეტისთვის", + "update-failed": "განახლება ვერ მოხერხდა", + "update-successful": "წარმატებით განახლდა", + "update-attribute": "ატრიბუტის განახლება", + "update-timeseries": "მონაცემთა სერიის განახლება", + "value": "მნიშვნელობა" + } + }, + "icon": { + "icon": "ხატულა", + "select-icon": "აირჩიეთ ხატულა", + "material-icons": "მასალის ხატულები", + "show-all": "მაჩვენე ყველა ხატულა" + }, + "custom": { + "widget-action": { + "action-cell-button": "მოქმედების უჯრედ-ღილაკი", + "row-click": "რიგზე დაჭერით", + "polygon-click": "პოლიგონზე დაჭერით", + "marker-click": "მარკერის დაჭერით", + "tooltip-tag-action": "ინსტრუმენტის სახელმძღვანელო", + "node-selected": "მონიშნულ კვანძზე", + "element-click": "HTML ელემენტზე დაჭერით", + "pie-slice-click": "სლაისზე დაჭერით", + "row-double-click": "რიგზე ორჯერ დაკლიკებით" + } + }, + "language": { + "language": "ენა" + } +} From 3400ba2fc00d0e6ee89d6ebba4294ee1ad29dd4a Mon Sep 17 00:00:00 2001 From: Vladyslav_Prykhodko Date: Mon, 15 Jun 2020 15:12:33 +0300 Subject: [PATCH 11/14] Fixed not correct plural for the Spanish language --- ui-ngx/src/assets/locale/locale.constant-es_ES.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui-ngx/src/assets/locale/locale.constant-es_ES.json b/ui-ngx/src/assets/locale/locale.constant-es_ES.json index 17966569af..91286c0c3f 100644 --- a/ui-ngx/src/assets/locale/locale.constant-es_ES.json +++ b/ui-ngx/src/assets/locale/locale.constant-es_ES.json @@ -9,7 +9,7 @@ "refresh-token-failed": "No se puede actualizar la sesión" }, "action": { - "activate": "Activar", + "activate": "Activar", "suspend": "Suspender", "save": "Guardar", "saveAs": "Guardar como", @@ -965,7 +965,7 @@ }, "extension": { "extensions": "Extensiones", - "selected-extensions": "{ count, plural, 1 {1 extension} de {# extensions} } seleccionadas", + "selected-extensions": "{ count, plural, 1 {1 extension} other {# extensions} } seleccionadas", "type": "Tipo", "key": "Clave", "value": "Valor", From 32a3c7b897fb3d01741eba43feb86f82451da7b9 Mon Sep 17 00:00:00 2001 From: vzikratyi Date: Wed, 1 Jul 2020 09:46:01 +0300 Subject: [PATCH 12/14] Moved hardcoded local datacenter name to config --- application/src/main/resources/thingsboard.yml | 2 ++ .../server/dao/cassandra/AbstractCassandraCluster.java | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/application/src/main/resources/thingsboard.yml b/application/src/main/resources/thingsboard.yml index 90b84dfbad..12bec00765 100644 --- a/application/src/main/resources/thingsboard.yml +++ b/application/src/main/resources/thingsboard.yml @@ -184,6 +184,8 @@ cassandra: keyspace_name: "${CASSANDRA_KEYSPACE_NAME:thingsboard}" # Specify node list url: "${CASSANDRA_URL:127.0.0.1:9042}" + # Specify local datacenter name + local_datacenter: "${CASSANDRA_LOCAL_DATACENTER:datacenter1}" # Enable/disable secure connection ssl: "${CASSANDRA_USE_SSL:false}" # Enable/disable JMX diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/cassandra/AbstractCassandraCluster.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/cassandra/AbstractCassandraCluster.java index b598d5e9b7..1e059d4219 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/cassandra/AbstractCassandraCluster.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/cassandra/AbstractCassandraCluster.java @@ -36,6 +36,8 @@ public abstract class AbstractCassandraCluster { private Boolean jmx; @Value("${cassandra.metrics}") private Boolean metrics; + @Value("${cassandra.local_datacenter}") + private String localDatacenter; @Autowired private CassandraDriverOptions driverOptions; @@ -82,7 +84,7 @@ public abstract class AbstractCassandraCluster { if (this.keyspaceName != null) { this.sessionBuilder.withKeyspace(this.keyspaceName); } - this.sessionBuilder.withLocalDatacenter("datacenter1"); + this.sessionBuilder.withLocalDatacenter(localDatacenter); session = sessionBuilder.build(); if (this.metrics && this.jmx) { MetricRegistry registry = From 0a2830e2264a424d1ed9cb51806e0ae021a94769 Mon Sep 17 00:00:00 2001 From: vzikratyi Date: Wed, 1 Jul 2020 10:18:17 +0300 Subject: [PATCH 13/14] Added default datacenter name to test config --- dao/src/test/resources/cassandra-test.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dao/src/test/resources/cassandra-test.properties b/dao/src/test/resources/cassandra-test.properties index eb01f07369..4cb4cd662a 100644 --- a/dao/src/test/resources/cassandra-test.properties +++ b/dao/src/test/resources/cassandra-test.properties @@ -4,6 +4,8 @@ cassandra.keyspace_name=thingsboard cassandra.url=127.0.0.1:9142 +cassandra.local_datacenter=datacenter1 + cassandra.ssl=false cassandra.jmx=false From fa79331702273bda7d6169bdec505f4a4fbf6c53 Mon Sep 17 00:00:00 2001 From: vzikratyi Date: Wed, 1 Jul 2020 14:14:36 +0300 Subject: [PATCH 14/14] Added default value to 'localDatacenter' --- .../server/dao/cassandra/AbstractCassandraCluster.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/cassandra/AbstractCassandraCluster.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/cassandra/AbstractCassandraCluster.java index 1e059d4219..e2082947c0 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/cassandra/AbstractCassandraCluster.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/cassandra/AbstractCassandraCluster.java @@ -36,7 +36,7 @@ public abstract class AbstractCassandraCluster { private Boolean jmx; @Value("${cassandra.metrics}") private Boolean metrics; - @Value("${cassandra.local_datacenter}") + @Value("${cassandra.local_datacenter:datacenter1}") private String localDatacenter; @Autowired