Commit d90db3adad9d6ce3d88314bfdedebdfc643e23a8

Authored by Igor Kulikov
Committed by GitHub
2 parents b80bca25 2ad3279f

Merge pull request #941 from dyosick/simplify-localizations-management

Simplify localizations management

Too many changes to show.

To preserve performance only 4 of 14 files are displayed.

... ... @@ -36,12 +36,12 @@
36 36 "angular-socialshare": "^2.3.8",
37 37 "angular-storage": "0.0.15",
38 38 "angular-touch": "1.5.8",
39   - "angular-translate": "2.13.1",
40   - "angular-translate-handler-log": "2.13.1",
41   - "angular-translate-interpolation-messageformat": "2.13.1",
42   - "angular-translate-loader-static-files": "2.13.1",
43   - "angular-translate-storage-cookie": "2.13.1",
44   - "angular-translate-storage-local": "2.13.1",
  39 + "angular-translate": "2.18.1",
  40 + "angular-translate-handler-log": "2.18.1",
  41 + "angular-translate-interpolation-messageformat": "2.18.1",
  42 + "angular-translate-loader-static-files": "2.18.1",
  43 + "angular-translate-storage-cookie": "2.18.1",
  44 + "angular-translate-storage-local": "2.18.1",
45 45 "angular-ui-ace": "^0.2.3",
46 46 "angular-ui-router": "^0.3.1",
47 47 "angular-websocket": "^2.0.1",
... ... @@ -127,7 +127,9 @@
127 127 "webpack-dev-middleware": "^1.6.1",
128 128 "webpack-dev-server": "^1.15.1",
129 129 "webpack-hot-middleware": "^2.12.2",
130   - "webpack-material-design-icons": "^0.1.0"
  130 + "webpack-material-design-icons": "^0.1.0",
  131 + "directory-tree": "^2.1.0",
  132 + "jsonminify": "^0.4.1"
131 133 },
132 134 "engine": "node >= 5.9.0",
133 135 "nyc": {
... ...
... ... @@ -15,10 +15,6 @@
15 15 */
16 16 import injectTapEventPlugin from 'react-tap-event-plugin';
17 17 import UrlHandler from './url.handler';
18   -import addLocaleKorean from './locale/locale.constant-ko';
19   -import addLocaleChinese from './locale/locale.constant-zh';
20   -import addLocaleRussian from './locale/locale.constant-ru';
21   -import addLocaleSpanish from './locale/locale.constant-es';
22 18
23 19 /* eslint-disable import/no-unresolved, import/default */
24 20
... ... @@ -38,46 +34,24 @@ export default function AppConfig($provide,
38 34 $mdThemingProvider,
39 35 $httpProvider,
40 36 $translateProvider,
41   - storeProvider,
42   - locales) {
  37 + storeProvider) {
43 38
44 39 injectTapEventPlugin();
45 40 $locationProvider.html5Mode(true);
46 41 $urlRouterProvider.otherwise(UrlHandler);
47 42 storeProvider.setCaching(false);
48   -
49   - $translateProvider.useSanitizeValueStrategy(null);
50   - $translateProvider.useMissingTranslationHandler('tbMissingTranslationHandler');
51   - $translateProvider.addInterpolation('$translateMessageFormatInterpolation');
52   - $translateProvider.fallbackLanguage('en_US');
53   -
54   - addLocaleKorean(locales);
55   - addLocaleChinese(locales);
56   - addLocaleRussian(locales);
57   - addLocaleSpanish(locales);
58   -
59   - for (var langKey in locales) {
60   - var translationTable = locales[langKey];
61   - $translateProvider.translations(langKey, translationTable);
62   - }
63   -
64   - var lang = $translateProvider.resolveClientLocale();
65   - if (lang) {
66   - lang = lang.toLowerCase();
67   - if (lang.startsWith('ko')) {
68   - $translateProvider.preferredLanguage('ko_KR');
69   - } else if (lang.startsWith('zh')) {
70   - $translateProvider.preferredLanguage('zh_CN');
71   - } else if (lang.startsWith('es')) {
72   - $translateProvider.preferredLanguage('es_ES');
73   - } else if (lang.startsWith('ru')) {
74   - $translateProvider.preferredLanguage('ru_RU');
75   - } else {
76   - $translateProvider.preferredLanguage('en_US');
77   - }
78   - } else {
79   - $translateProvider.preferredLanguage('en_US');
80   - }
  43 +
  44 + $translateProvider.useSanitizeValueStrategy(null)
  45 + .useMissingTranslationHandler('tbMissingTranslationHandler')
  46 + .addInterpolation('$translateMessageFormatInterpolation')
  47 + .useStaticFilesLoader({
  48 + prefix: PUBLIC_PATH + 'locale/locale.constant-', //eslint-disable-line
  49 + suffix: '.json'
  50 + })
  51 + .registerAvailableLanguageKeys(SUPPORTED_LANGS, getLanguageAliases(SUPPORTED_LANGS)) //eslint-disable-line
  52 + .fallbackLanguage('en_US') // must be before determinePreferredLanguage
  53 + .uniformLanguageTag('java') // must be before determinePreferredLanguage
  54 + .determinePreferredLanguage();
81 55
82 56 $httpProvider.interceptors.push('globalInterceptor');
83 57
... ... @@ -168,4 +142,24 @@ export default function AppConfig($provide,
168 142 //$mdThemingProvider.alwaysWatchTheme(true);
169 143 }
170 144
  145 + function getLanguageAliases(supportedLangs) {
  146 + var aliases = {};
  147 +
  148 + supportedLangs.sort().forEach(function(item, index, array) {
  149 + if (item.length === 2) {
  150 + aliases[item] = item;
  151 + aliases[item + '_*'] = item;
  152 + } else {
  153 + var key = item.slice(0, 2);
  154 + if (index === 0 || key !== array[index - 1].slice(0, 2)) {
  155 + aliases[key] = item;
  156 + aliases[key + '_*'] = item;
  157 + } else {
  158 + aliases[item] = item;
  159 + }
  160 + }
  161 + });
  162 +
  163 + return aliases;
  164 + }
171 165 }
\ No newline at end of file
... ...
... ... @@ -51,7 +51,7 @@ import react from 'ngreact';
51 51 import '@flowjs/ng-flow/dist/ng-flow-standalone.min';
52 52 import 'ngFlowchart/dist/ngFlowchart';
53 53
54   -import thingsboardLocales from './locale/locale.constant';
  54 +import thingsboardTranslateHandler from './locale/translate-handler';
55 55 import thingsboardLogin from './login';
56 56 import thingsboardDialogs from './components/datakey-config-dialog.controller';
57 57 import thingsboardMenu from './services/menu.service';
... ... @@ -117,7 +117,7 @@ angular.module('thingsboard', [
117 117 react.name,
118 118 'flow',
119 119 'flowchart',
120   - thingsboardLocales,
  120 + thingsboardTranslateHandler,
121 121 thingsboardLogin,
122 122 thingsboardDialogs,
123 123 thingsboardMenu,
... ...
ui/src/app/locale/locale.constant-en_US.json renamed from ui/src/app/locale/locale.constant.js
1   -/*
2   - * Copyright © 2016-2018 The Thingsboard Authors
3   - *
4   - * Licensed under the Apache License, Version 2.0 (the "License");
5   - * you may not use this file except in compliance with the License.
6   - * You may obtain a copy of the License at
7   - *
8   - * http://www.apache.org/licenses/LICENSE-2.0
9   - *
10   - * Unless required by applicable law or agreed to in writing, software
11   - * distributed under the License is distributed on an "AS IS" BASIS,
12   - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   - * See the License for the specific language governing permissions and
14   - * limitations under the License.
15   - */
16   -import ThingsboardMissingTranslateHandler from './translate-handler';
  1 +{
  2 + "access": {
  3 + "unauthorized": "Unauthorized",
  4 + "unauthorized-access": "Unauthorized Access",
  5 + "unauthorized-access-text": "You should sign in to have access to this resource!",
  6 + "access-forbidden": "Access Forbidden",
  7 + "access-forbidden-text": "You haven't access rights to this location!<br/>Try to sign in with different user if you still wish to gain access to this location.",
  8 + "refresh-token-expired": "Session has expired",
  9 + "refresh-token-failed": "Unable to refresh session"
  10 + },
  11 + "action": {
  12 + "activate": "Activate",
  13 + "suspend": "Suspend",
  14 + "save": "Save",
  15 + "saveAs": "Save as",
  16 + "cancel": "Cancel",
  17 + "ok": "OK",
  18 + "delete": "Delete",
  19 + "add": "Add",
  20 + "yes": "Yes",
  21 + "no": "No",
  22 + "update": "Update",
  23 + "remove": "Remove",
  24 + "search": "Search",
  25 + "clear-search": "Clear search",
  26 + "assign": "Assign",
  27 + "unassign": "Unassign",
  28 + "share": "Share",
  29 + "make-private": "Make private",
  30 + "apply": "Apply",
  31 + "apply-changes": "Apply changes",
  32 + "edit-mode": "Edit mode",
  33 + "enter-edit-mode": "Enter edit mode",
  34 + "decline-changes": "Decline changes",
  35 + "close": "Close",
  36 + "back": "Back",
  37 + "run": "Run",
  38 + "sign-in": "Sign in!",
  39 + "edit": "Edit",
  40 + "view": "View",
  41 + "create": "Create",
  42 + "drag": "Drag",
  43 + "refresh": "Refresh",
  44 + "undo": "Undo",
  45 + "copy": "Copy",
  46 + "paste": "Paste",
  47 + "copy-reference": "Copy reference",
  48 + "paste-reference": "Paste reference",
  49 + "import": "Import",
  50 + "export": "Export",
  51 + "share-via": "Share via {{provider}}"
  52 + },
  53 + "aggregation": {
  54 + "aggregation": "Aggregation",
  55 + "function": "Data aggregation function",
  56 + "limit": "Max values",
  57 + "group-interval": "Grouping interval",
  58 + "min": "Min",
  59 + "max": "Max",
  60 + "avg": "Average",
  61 + "sum": "Sum",
  62 + "count": "Count",
  63 + "none": "None"
  64 + },
  65 + "admin": {
  66 + "general": "General",
  67 + "general-settings": "General Settings",
  68 + "outgoing-mail": "Outgoing Mail",
  69 + "outgoing-mail-settings": "Outgoing Mail Settings",
  70 + "system-settings": "System Settings",
  71 + "test-mail-sent": "Test mail was successfully sent!",
  72 + "base-url": "Base URL",
  73 + "base-url-required": "Base URL is required.",
  74 + "mail-from": "Mail From",
  75 + "mail-from-required": "Mail From is required.",
  76 + "smtp-protocol": "SMTP protocol",
  77 + "smtp-host": "SMTP host",
  78 + "smtp-host-required": "SMTP host is required.",
  79 + "smtp-port": "SMTP port",
  80 + "smtp-port-required": "You must supply a smtp port.",
  81 + "smtp-port-invalid": "That doesn't look like a valid smtp port.",
  82 + "timeout-msec": "Timeout (msec)",
  83 + "timeout-required": "Timeout is required.",
  84 + "timeout-invalid": "That doesn't look like a valid timeout.",
  85 + "enable-tls": "Enable TLS",
  86 + "send-test-mail": "Send test mail"
  87 + },
  88 + "alarm": {
  89 + "alarm": "Alarm",
  90 + "alarms": "Alarms",
  91 + "select-alarm": "Select alarm",
  92 + "no-alarms-matching": "No alarms matching '{{entity}}' were found.",
  93 + "alarm-required": "Alarm is required",
  94 + "alarm-status": "Alarm status",
  95 + "search-status": {
  96 + "ANY": "Any",
  97 + "ACTIVE": "Active",
  98 + "CLEARED": "Cleared",
  99 + "ACK": "Acknowledged",
  100 + "UNACK": "Unacknowledged"
  101 + },
  102 + "display-status": {
  103 + "ACTIVE_UNACK": "Active Unacknowledged",
  104 + "ACTIVE_ACK": "Active Acknowledged",
  105 + "CLEARED_UNACK": "Cleared Unacknowledged",
  106 + "CLEARED_ACK": "Cleared Acknowledged"
  107 + },
  108 + "no-alarms-prompt": "No alarms found",
  109 + "created-time": "Created time",
  110 + "type": "Type",
  111 + "severity": "Severity",
  112 + "originator": "Originator",
  113 + "originator-type": "Originator type",
  114 + "details": "Details",
  115 + "status": "Status",
  116 + "alarm-details": "Alarm details",
  117 + "start-time": "Start time",
  118 + "end-time": "End time",
  119 + "ack-time": "Acknowledged time",
  120 + "clear-time": "Cleared time",
  121 + "severity-critical": "Critical",
  122 + "severity-major": "Major",
  123 + "severity-minor": "Minor",
  124 + "severity-warning": "Warning",
  125 + "severity-indeterminate": "Indeterminate",
  126 + "acknowledge": "Acknowledge",
  127 + "clear": "Clear",
  128 + "search": "Search alarms",
  129 + "selected-alarms": "{ count, select, 1 {1 alarm} other {# alarms} } selected",
  130 + "no-data": "No data to display",
  131 + "polling-interval": "Alarms polling interval (sec)",
  132 + "polling-interval-required": "Alarms polling interval is required.",
  133 + "min-polling-interval-message": "At least 1 sec polling interval is allowed.",
  134 + "aknowledge-alarms-title": "Acknowledge { count, select, 1 {1 alarm} other {# alarms} }",
  135 + "aknowledge-alarms-text": "Are you sure you want to acknowledge { count, select, 1 {1 alarm} other {# alarms} }?",
  136 + "clear-alarms-title": "Clear { count, select, 1 {1 alarm} other {# alarms} }",
  137 + "clear-alarms-text": "Are you sure you want to clear { count, select, 1 {1 alarm} other {# alarms} }?"
  138 + },
  139 + "alias": {
  140 + "add": "Add alias",
  141 + "edit": "Edit alias",
  142 + "name": "Alias name",
  143 + "name-required": "Alias name is required",
  144 + "duplicate-alias": "Alias with same name is already exists.",
  145 + "filter-type-single-entity": "Single entity",
  146 + "filter-type-entity-list": "Entity list",
  147 + "filter-type-entity-name": "Entity name",
  148 + "filter-type-state-entity": "Entity from dashboard state",
  149 + "filter-type-state-entity-description": "Entity taken from dashboard state parameters",
  150 + "filter-type-asset-type": "Asset type",
  151 + "filter-type-asset-type-description": "Assets of type '{{assetType}}'",
  152 + "filter-type-asset-type-and-name-description": "Assets of type '{{assetType}}' and with name starting with '{{prefix}}'",
  153 + "filter-type-device-type": "Device type",
  154 + "filter-type-device-type-description": "Devices of type '{{deviceType}}'",
  155 + "filter-type-device-type-and-name-description": "Devices of type '{{deviceType}}' and with name starting with '{{prefix}}'",
  156 + "filter-type-relations-query": "Relations query",
  157 + "filter-type-relations-query-description": "{{entities}} that have {{relationType}} relation {{direction}} {{rootEntity}}",
  158 + "filter-type-asset-search-query": "Asset search query",
  159 + "filter-type-asset-search-query-description": "Assets with types {{assetTypes}} that have {{relationType}} relation {{direction}} {{rootEntity}}",
  160 + "filter-type-device-search-query": "Device search query",
  161 + "filter-type-device-search-query-description": "Devices with types {{deviceTypes}} that have {{relationType}} relation {{direction}} {{rootEntity}}",
  162 + "entity-filter": "Entity filter",
  163 + "resolve-multiple": "Resolve as multiple entities",
  164 + "filter-type": "Filter type",
  165 + "filter-type-required": "Filter type is required.",
  166 + "entity-filter-no-entity-matched": "No entities matching specified filter were found.",
  167 + "no-entity-filter-specified": "No entity filter specified",
  168 + "root-state-entity": "Use dashboard state entity as root",
  169 + "root-entity": "Root entity",
  170 + "state-entity-parameter-name": "State entity parameter name",
  171 + "default-state-entity": "Default state entity",
  172 + "default-entity-parameter-name": "By default",
  173 + "max-relation-level": "Max relation level",
  174 + "unlimited-level": "Unlimited level",
  175 + "state-entity": "Dashboard state entity",
  176 + "all-entities": "All entities",
  177 + "any-relation": "any"
  178 + },
  179 + "asset": {
  180 + "asset": "Asset",
  181 + "assets": "Assets",
  182 + "management": "Asset management",
  183 + "view-assets": "View Assets",
  184 + "add": "Add Asset",
  185 + "assign-to-customer": "Assign to customer",
  186 + "assign-asset-to-customer": "Assign Asset(s) To Customer",
  187 + "assign-asset-to-customer-text": "Please select the assets to assign to the customer",
  188 + "no-assets-text": "No assets found",
  189 + "assign-to-customer-text": "Please select the customer to assign the asset(s)",
  190 + "public": "Public",
  191 + "assignedToCustomer": "Assigned to customer",
  192 + "make-public": "Make asset public",
  193 + "make-private": "Make asset private",
  194 + "unassign-from-customer": "Unassign from customer",
  195 + "delete": "Delete asset",
  196 + "asset-public": "Asset is public",
  197 + "asset-type": "Asset type",
  198 + "asset-type-required": "Asset type is required.",
  199 + "select-asset-type": "Select asset type",
  200 + "enter-asset-type": "Enter asset type",
  201 + "any-asset": "Any asset",
  202 + "no-asset-types-matching": "No asset types matching '{{entitySubtype}}' were found.",
  203 + "asset-type-list-empty": "No asset types selected.",
  204 + "asset-types": "Asset types",
  205 + "name": "Name",
  206 + "name-required": "Name is required.",
  207 + "description": "Description",
  208 + "type": "Type",
  209 + "type-required": "Type is required.",
  210 + "details": "Details",
  211 + "events": "Events",
  212 + "add-asset-text": "Add new asset",
  213 + "asset-details": "Asset details",
  214 + "assign-assets": "Assign assets",
  215 + "assign-assets-text": "Assign { count, select, 1 {1 asset} other {# assets} } to customer",
  216 + "delete-assets": "Delete assets",
  217 + "unassign-assets": "Unassign assets",
  218 + "unassign-assets-action-title": "Unassign { count, select, 1 {1 asset} other {# assets} } from customer",
  219 + "assign-new-asset": "Assign new asset",
  220 + "delete-asset-title": "Are you sure you want to delete the asset '{{assetName}}'?",
  221 + "delete-asset-text": "Be careful, after the confirmation the asset and all related data will become unrecoverable.",
  222 + "delete-assets-title": "Are you sure you want to delete { count, select, 1 {1 asset} other {# assets} }?",
  223 + "delete-assets-action-title": "Delete { count, select, 1 {1 asset} other {# assets} }",
  224 + "delete-assets-text": "Be careful, after the confirmation all selected assets will be removed and all related data will become unrecoverable.",
  225 + "make-public-asset-title": "Are you sure you want to make the asset '{{assetName}}' public?",
  226 + "make-public-asset-text": "After the confirmation the asset and all its data will be made public and accessible by others.",
  227 + "make-private-asset-title": "Are you sure you want to make the asset '{{assetName}}' private?",
  228 + "make-private-asset-text": "After the confirmation the asset and all its data will be made private and won't be accessible by others.",
  229 + "unassign-asset-title": "Are you sure you want to unassign the asset '{{assetName}}'?",
  230 + "unassign-asset-text": "After the confirmation the asset will be unassigned and won't be accessible by the customer.",
  231 + "unassign-asset": "Unassign asset",
  232 + "unassign-assets-title": "Are you sure you want to unassign { count, select, 1 {1 asset} other {# assets} }?",
  233 + "unassign-assets-text": "After the confirmation all selected assets will be unassigned and won't be accessible by the customer.",
  234 + "copyId": "Copy asset Id",
  235 + "idCopiedMessage": "Asset Id has been copied to clipboard",
  236 + "select-asset": "Select asset",
  237 + "no-assets-matching": "No assets matching '{{entity}}' were found.",
  238 + "asset-required": "Asset is required",
  239 + "name-starts-with": "Asset name starts with"
  240 + },
  241 + "attribute": {
  242 + "attributes": "Attributes",
  243 + "latest-telemetry": "Latest telemetry",
  244 + "attributes-scope": "Entity attributes scope",
  245 + "scope-latest-telemetry": "Latest telemetry",
  246 + "scope-client": "Client attributes",
  247 + "scope-server": "Server attributes",
  248 + "scope-shared": "Shared attributes",
  249 + "add": "Add attribute",
  250 + "key": "Key",
  251 + "last-update-time": "Last update time",
  252 + "key-required": "Attribute key is required.",
  253 + "value": "Value",
  254 + "value-required": "Attribute value is required.",
  255 + "delete-attributes-title": "Are you sure you want to delete { count, select, 1 {1 attribute} other {# attributes} }?",
  256 + "delete-attributes-text": "Be careful, after the confirmation all selected attributes will be removed.",
  257 + "delete-attributes": "Delete attributes",
  258 + "enter-attribute-value": "Enter attribute value",
  259 + "show-on-widget": "Show on widget",
  260 + "widget-mode": "Widget mode",
  261 + "next-widget": "Next widget",
  262 + "prev-widget": "Previous widget",
  263 + "add-to-dashboard": "Add to dashboard",
  264 + "add-widget-to-dashboard": "Add widget to dashboard",
  265 + "selected-attributes": "{ count, select, 1 {1 attribute} other {# attributes} } selected",
  266 + "selected-telemetry": "{ count, select, 1 {1 telemetry unit} other {# telemetry units} } selected"
  267 + },
  268 + "audit-log": {
  269 + "audit": "Audit",
  270 + "audit-logs": "Audit Logs",
  271 + "timestamp": "Timestamp",
  272 + "entity-type": "Entity Type",
  273 + "entity-name": "Entity Name",
  274 + "user": "User",
  275 + "type": "Type",
  276 + "status": "Status",
  277 + "details": "Details",
  278 + "type-added": "Added",
  279 + "type-deleted": "Deleted",
  280 + "type-updated": "Updated",
  281 + "type-attributes-updated": "Attributes updated",
  282 + "type-attributes-deleted": "Attributes deleted",
  283 + "type-rpc-call": "RPC call",
  284 + "type-credentials-updated": "Credentials updated",
  285 + "type-assigned-to-customer": "Assigned to Customer",
  286 + "type-unassigned-from-customer": "Unassigned from Customer",
  287 + "type-activated": "Activated",
  288 + "type-suspended": "Suspended",
  289 + "type-credentials-read": "Credentials read",
  290 + "type-attributes-read": "Attributes read",
  291 + "status-success": "Success",
  292 + "status-failure": "Failure",
  293 + "audit-log-details": "Audit log details",
  294 + "no-audit-logs-prompt": "No logs found",
  295 + "action-data": "Action data",
  296 + "failure-details": "Failure details",
  297 + "search": "Search audit logs",
  298 + "clear-search": "Clear search"
  299 + },
  300 + "confirm-on-exit": {
  301 + "message": "You have unsaved changes. Are you sure you want to leave this page?",
  302 + "html-message": "You have unsaved changes.<br/>Are you sure you want to leave this page?",
  303 + "title": "Unsaved changes"
  304 + },
  305 + "contact": {
  306 + "country": "Country",
  307 + "city": "City",
  308 + "state": "State / Province",
  309 + "postal-code": "Zip / Postal Code",
  310 + "postal-code-invalid": "Invalid Zip / Postal Code format.",
  311 + "address": "Address",
  312 + "address2": "Address 2",
  313 + "phone": "Phone",
  314 + "email": "Email",
  315 + "no-address": "No address"
  316 + },
  317 + "common": {
  318 + "username": "Username",
  319 + "password": "Password",
  320 + "enter-username": "Enter username",
  321 + "enter-password": "Enter password",
  322 + "enter-search": "Enter search"
  323 + },
  324 + "content-type": {
  325 + "json": "Json",
  326 + "text": "Text",
  327 + "binary": "Binary (Base64)"
  328 + },
  329 + "customer": {
  330 + "customer": "Customer",
  331 + "customers": "Customers",
  332 + "management": "Customer management",
  333 + "dashboard": "Customer Dashboard",
  334 + "dashboards": "Customer Dashboards",
  335 + "devices": "Customer Devices",
  336 + "assets": "Customer Assets",
  337 + "public-dashboards": "Public Dashboards",
  338 + "public-devices": "Public Devices",
  339 + "public-assets": "Public Assets",
  340 + "add": "Add Customer",
  341 + "delete": "Delete customer",
  342 + "manage-customer-users": "Manage customer users",
  343 + "manage-customer-devices": "Manage customer devices",
  344 + "manage-customer-dashboards": "Manage customer dashboards",
  345 + "manage-public-devices": "Manage public devices",
  346 + "manage-public-dashboards": "Manage public dashboards",
  347 + "manage-customer-assets": "Manage customer assets",
  348 + "manage-public-assets": "Manage public assets",
  349 + "add-customer-text": "Add new customer",
  350 + "no-customers-text": "No customers found",
  351 + "customer-details": "Customer details",
  352 + "delete-customer-title": "Are you sure you want to delete the customer '{{customerTitle}}'?",
  353 + "delete-customer-text": "Be careful, after the confirmation the customer and all related data will become unrecoverable.",
  354 + "delete-customers-title": "Are you sure you want to delete { count, select, 1 {1 customer} other {# customers} }?",
  355 + "delete-customers-action-title": "Delete { count, select, 1 {1 customer} other {# customers} }",
  356 + "delete-customers-text": "Be careful, after the confirmation all selected customers will be removed and all related data will become unrecoverable.",
  357 + "manage-users": "Manage users",
  358 + "manage-assets": "Manage assets",
  359 + "manage-devices": "Manage devices",
  360 + "manage-dashboards": "Manage dashboards",
  361 + "title": "Title",
  362 + "title-required": "Title is required.",
  363 + "description": "Description",
  364 + "details": "Details",
  365 + "events": "Events",
  366 + "copyId": "Copy customer Id",
  367 + "idCopiedMessage": "Customer Id has been copied to clipboard",
  368 + "select-customer": "Select customer",
  369 + "no-customers-matching": "No customers matching '{{entity}}' were found.",
  370 + "customer-required": "Customer is required",
  371 + "select-default-customer": "Select default customer",
  372 + "default-customer": "Default customer",
  373 + "default-customer-required": "Default customer is required in order to debug dashboard on Tenant level"
  374 + },
  375 + "datetime": {
  376 + "date-from": "Date from",
  377 + "time-from": "Time from",
  378 + "date-to": "Date to",
  379 + "time-to": "Time to"
  380 + },
  381 + "dashboard": {
  382 + "dashboard": "Dashboard",
  383 + "dashboards": "Dashboards",
  384 + "management": "Dashboard management",
  385 + "view-dashboards": "View Dashboards",
  386 + "add": "Add Dashboard",
  387 + "assign-dashboard-to-customer": "Assign Dashboard(s) To Customer",
  388 + "assign-dashboard-to-customer-text": "Please select the dashboards to assign to the customer",
  389 + "assign-to-customer-text": "Please select the customer to assign the dashboard(s)",
  390 + "assign-to-customer": "Assign to customer",
  391 + "unassign-from-customer": "Unassign from customer",
  392 + "make-public": "Make dashboard public",
  393 + "make-private": "Make dashboard private",
  394 + "manage-assigned-customers": "Manage assigned customers",
  395 + "assigned-customers": "Assigned customers",
  396 + "assign-to-customers": "Assign Dashboard(s) To Customers",
  397 + "assign-to-customers-text": "Please select the customers to assign the dashboard(s)",
  398 + "unassign-from-customers": "Unassign Dashboard(s) From Customers",
  399 + "unassign-from-customers-text": "Please select the customers to unassign from the dashboard(s)",
  400 + "no-dashboards-text": "No dashboards found",
  401 + "no-widgets": "No widgets configured",
  402 + "add-widget": "Add new widget",
  403 + "title": "Title",
  404 + "select-widget-title": "Select widget",
  405 + "select-widget-subtitle": "List of available widget types",
  406 + "delete": "Delete dashboard",
  407 + "title-required": "Title is required.",
  408 + "description": "Description",
  409 + "details": "Details",
  410 + "dashboard-details": "Dashboard details",
  411 + "add-dashboard-text": "Add new dashboard",
  412 + "assign-dashboards": "Assign dashboards",
  413 + "assign-new-dashboard": "Assign new dashboard",
  414 + "assign-dashboards-text": "Assign { count, select, 1 {1 dashboard} other {# dashboards} } to customers",
  415 + "unassign-dashboards-action-text": "Unassign { count, select, 1 {1 dashboard} other {# dashboards} } from customers",
  416 + "delete-dashboards": "Delete dashboards",
  417 + "unassign-dashboards": "Unassign dashboards",
  418 + "unassign-dashboards-action-title": "Unassign { count, select, 1 {1 dashboard} other {# dashboards} } from customer",
  419 + "delete-dashboard-title": "Are you sure you want to delete the dashboard '{{dashboardTitle}}'?",
  420 + "delete-dashboard-text": "Be careful, after the confirmation the dashboard and all related data will become unrecoverable.",
  421 + "delete-dashboards-title": "Are you sure you want to delete { count, select, 1 {1 dashboard} other {# dashboards} }?",
  422 + "delete-dashboards-action-title": "Delete { count, select, 1 {1 dashboard} other {# dashboards} }",
  423 + "delete-dashboards-text": "Be careful, after the confirmation all selected dashboards will be removed and all related data will become unrecoverable.",
  424 + "unassign-dashboard-title": "Are you sure you want to unassign the dashboard '{{dashboardTitle}}'?",
  425 + "unassign-dashboard-text": "After the confirmation the dashboard will be unassigned and won't be accessible by the customer.",
  426 + "unassign-dashboard": "Unassign dashboard",
  427 + "unassign-dashboards-title": "Are you sure you want to unassign { count, select, 1 {1 dashboard} other {# dashboards} }?",
  428 + "unassign-dashboards-text": "After the confirmation all selected dashboards will be unassigned and won't be accessible by the customer.",
  429 + "public-dashboard-title": "Dashboard is now public",
  430 + "public-dashboard-text": "Your dashboard <b>{{dashboardTitle}}</b> is now public and accessible via next public <a href='{{publicLink}}' target='_blank'>link</a>:",
  431 + "public-dashboard-notice": "<b>Note:</b> Do not forget to make related devices public in order to access their data.",
  432 + "make-private-dashboard-title": "Are you sure you want to make the dashboard '{{dashboardTitle}}' private?",
  433 + "make-private-dashboard-text": "After the confirmation the dashboard will be made private and won't be accessible by others.",
  434 + "make-private-dashboard": "Make dashboard private",
  435 + "socialshare-text": "'{{dashboardTitle}}' powered by ThingsBoard",
  436 + "socialshare-title": "'{{dashboardTitle}}' powered by ThingsBoard",
  437 + "select-dashboard": "Select dashboard",
  438 + "no-dashboards-matching": "No dashboards matching '{{entity}}' were found.",
  439 + "dashboard-required": "Dashboard is required.",
  440 + "select-existing": "Select existing dashboard",
  441 + "create-new": "Create new dashboard",
  442 + "new-dashboard-title": "New dashboard title",
  443 + "open-dashboard": "Open dashboard",
  444 + "set-background": "Set background",
  445 + "background-color": "Background color",
  446 + "background-image": "Background image",
  447 + "background-size-mode": "Background size mode",
  448 + "no-image": "No image selected",
  449 + "drop-image": "Drop an image or click to select a file to upload.",
  450 + "settings": "Settings",
  451 + "columns-count": "Columns count",
  452 + "columns-count-required": "Columns count is required.",
  453 + "min-columns-count-message": "Only 10 minimum column count is allowed.",
  454 + "max-columns-count-message": "Only 1000 maximum column count is allowed.",
  455 + "widgets-margins": "Margin between widgets",
  456 + "horizontal-margin": "Horizontal margin",
  457 + "horizontal-margin-required": "Horizontal margin value is required.",
  458 + "min-horizontal-margin-message": "Only 0 is allowed as minimum horizontal margin value.",
  459 + "max-horizontal-margin-message": "Only 50 is allowed as maximum horizontal margin value.",
  460 + "vertical-margin": "Vertical margin",
  461 + "vertical-margin-required": "Vertical margin value is required.",
  462 + "min-vertical-margin-message": "Only 0 is allowed as minimum vertical margin value.",
  463 + "max-vertical-margin-message": "Only 50 is allowed as maximum vertical margin value.",
  464 + "autofill-height": "Auto fill layout height",
  465 + "mobile-layout": "Mobile layout settings",
  466 + "mobile-row-height": "Mobile row height, px",
  467 + "mobile-row-height-required": "Mobile row height value is required.",
  468 + "min-mobile-row-height-message": "Only 5 pixels is allowed as minimum mobile row height value.",
  469 + "max-mobile-row-height-message": "Only 200 pixels is allowed as maximum mobile row height value.",
  470 + "display-title": "Display dashboard title",
  471 + "toolbar-always-open": "Keep toolbar opened",
  472 + "title-color": "Title color",
  473 + "display-dashboards-selection": "Display dashboards selection",
  474 + "display-entities-selection": "Display entities selection",
  475 + "display-dashboard-timewindow": "Display timewindow",
  476 + "display-dashboard-export": "Display export",
  477 + "import": "Import dashboard",
  478 + "export": "Export dashboard",
  479 + "export-failed-error": "Unable to export dashboard: {{error}}",
  480 + "create-new-dashboard": "Create new dashboard",
  481 + "dashboard-file": "Dashboard file",
  482 + "invalid-dashboard-file-error": "Unable to import dashboard: Invalid dashboard data structure.",
  483 + "dashboard-import-missing-aliases-title": "Configure aliases used by imported dashboard",
  484 + "create-new-widget": "Create new widget",
  485 + "import-widget": "Import widget",
  486 + "widget-file": "Widget file",
  487 + "invalid-widget-file-error": "Unable to import widget: Invalid widget data structure.",
  488 + "widget-import-missing-aliases-title": "Configure aliases used by imported widget",
  489 + "open-toolbar": "Open dashboard toolbar",
  490 + "close-toolbar": "Close toolbar",
  491 + "configuration-error": "Configuration error",
  492 + "alias-resolution-error-title": "Dashboard aliases configuration error",
  493 + "invalid-aliases-config": "Unable to find any devices matching to some of the aliases filter.<br/>Please contact your administrator in order to resolve this issue.",
  494 + "select-devices": "Select devices",
  495 + "assignedToCustomer": "Assigned to customer",
  496 + "assignedToCustomers": "Assigned to customers",
  497 + "public": "Public",
  498 + "public-link": "Public link",
  499 + "copy-public-link": "Copy public link",
  500 + "public-link-copied-message": "Dashboard public link has been copied to clipboard",
  501 + "manage-states": "Manage dashboard states",
  502 + "states": "Dashboard states",
  503 + "search-states": "Search dashboard states",
  504 + "selected-states": "{ count, select, 1 {1 dashboard state} other {# dashboard states} } selected",
  505 + "edit-state": "Edit dashboard state",
  506 + "delete-state": "Delete dashboard state",
  507 + "add-state": "Add dashboard state",
  508 + "state": "Dashboard state",
  509 + "state-name": "Name",
  510 + "state-name-required": "Dashboard state name is required.",
  511 + "state-id": "State Id",
  512 + "state-id-required": "Dashboard state id is required.",
  513 + "state-id-exists": "Dashboard state with the same id is already exists.",
  514 + "is-root-state": "Root state",
  515 + "delete-state-title": "Delete dashboard state",
  516 + "delete-state-text": "Are you sure you want delete dashboard state with name '{{stateName}}'?",
  517 + "show-details": "Show details",
  518 + "hide-details": "Hide details",
  519 + "select-state": "Select target state",
  520 + "state-controller": "State controller"
  521 + },
  522 + "datakey": {
  523 + "settings": "Settings",
  524 + "advanced": "Advanced",
  525 + "label": "Label",
  526 + "color": "Color",
  527 + "units": "Special symbol to show next to value",
  528 + "decimals": "Number of digits after floating point",
  529 + "data-generation-func": "Data generation function",
  530 + "use-data-post-processing-func": "Use data post-processing function",
  531 + "configuration": "Data key configuration",
  532 + "timeseries": "Timeseries",
  533 + "attributes": "Attributes",
  534 + "alarm": "Alarm fields",
  535 + "timeseries-required": "Entity timeseries are required.",
  536 + "timeseries-or-attributes-required": "Entity timeseries/attributes are required.",
  537 + "maximum-timeseries-or-attributes": "Maximum { count, select, 1 {1 timeseries/attribute is allowed.} other {# timeseries/attributes are allowed} }",
  538 + "alarm-fields-required": "Alarm fields are required.",
  539 + "function-types": "Function types",
  540 + "function-types-required": "Function types are required.",
  541 + "maximum-function-types": "Maximum { count, select, 1 {1 function type is allowed.} other {# function types are allowed} }"
  542 + },
  543 + "datasource": {
  544 + "type": "Datasource type",
  545 + "name": "Name",
  546 + "add-datasource-prompt": "Please add datasource"
  547 + },
  548 + "details": {
  549 + "edit-mode": "Edit mode",
  550 + "toggle-edit-mode": "Toggle edit mode"
  551 + },
  552 + "device": {
  553 + "device": "Device",
  554 + "device-required": "Device is required.",
  555 + "devices": "Devices",
  556 + "management": "Device management",
  557 + "view-devices": "View Devices",
  558 + "device-alias": "Device alias",
  559 + "aliases": "Device aliases",
  560 + "no-alias-matching": "'{{alias}}' not found.",
  561 + "no-aliases-found": "No aliases found.",
  562 + "no-key-matching": "'{{key}}' not found.",
  563 + "no-keys-found": "No keys found.",
  564 + "create-new-alias": "Create a new one!",
  565 + "create-new-key": "Create a new one!",
  566 + "duplicate-alias-error": "Duplicate alias found '{{alias}}'.<br>Device aliases must be unique whithin the dashboard.",
  567 + "configure-alias": "Configure '{{alias}}' alias",
  568 + "no-devices-matching": "No devices matching '{{entity}}' were found.",
  569 + "alias": "Alias",
  570 + "alias-required": "Device alias is required.",
  571 + "remove-alias": "Remove device alias",
  572 + "add-alias": "Add device alias",
  573 + "name-starts-with": "Device name starts with",
  574 + "device-list": "Device list",
  575 + "use-device-name-filter": "Use filter",
  576 + "device-list-empty": "No devices selected.",
  577 + "device-name-filter-required": "Device name filter is required.",
  578 + "device-name-filter-no-device-matched": "No devices starting with '{{device}}' were found.",
  579 + "add": "Add Device",
  580 + "assign-to-customer": "Assign to customer",
  581 + "assign-device-to-customer": "Assign Device(s) To Customer",
  582 + "assign-device-to-customer-text": "Please select the devices to assign to the customer",
  583 + "make-public": "Make device public",
  584 + "make-private": "Make device private",
  585 + "no-devices-text": "No devices found",
  586 + "assign-to-customer-text": "Please select the customer to assign the device(s)",
  587 + "device-details": "Device details",
  588 + "add-device-text": "Add new device",
  589 + "credentials": "Credentials",
  590 + "manage-credentials": "Manage credentials",
  591 + "delete": "Delete device",
  592 + "assign-devices": "Assign devices",
  593 + "assign-devices-text": "Assign { count, select, 1 {1 device} other {# devices} } to customer",
  594 + "delete-devices": "Delete devices",
  595 + "unassign-from-customer": "Unassign from customer",
  596 + "unassign-devices": "Unassign devices",
  597 + "unassign-devices-action-title": "Unassign { count, select, 1 {1 device} other {# devices} } from customer",
  598 + "assign-new-device": "Assign new device",
  599 + "make-public-device-title": "Are you sure you want to make the device '{{deviceName}}' public?",
  600 + "make-public-device-text": "After the confirmation the device and all its data will be made public and accessible by others.",
  601 + "make-private-device-title": "Are you sure you want to make the device '{{deviceName}}' private?",
  602 + "make-private-device-text": "After the confirmation the device and all its data will be made private and won't be accessible by others.",
  603 + "view-credentials": "View credentials",
  604 + "delete-device-title": "Are you sure you want to delete the device '{{deviceName}}'?",
  605 + "delete-device-text": "Be careful, after the confirmation the device and all related data will become unrecoverable.",
  606 + "delete-devices-title": "Are you sure you want to delete { count, select, 1 {1 device} other {# devices} }?",
  607 + "delete-devices-action-title": "Delete { count, select, 1 {1 device} other {# devices} }",
  608 + "delete-devices-text": "Be careful, after the confirmation all selected devices will be removed and all related data will become unrecoverable.",
  609 + "unassign-device-title": "Are you sure you want to unassign the device '{{deviceName}}'?",
  610 + "unassign-device-text": "After the confirmation the device will be unassigned and won't be accessible by the customer.",
  611 + "unassign-device": "Unassign device",
  612 + "unassign-devices-title": "Are you sure you want to unassign { count, select, 1 {1 device} other {# devices} }?",
  613 + "unassign-devices-text": "After the confirmation all selected devices will be unassigned and won't be accessible by the customer.",
  614 + "device-credentials": "Device Credentials",
  615 + "credentials-type": "Credentials type",
  616 + "access-token": "Access token",
  617 + "access-token-required": "Access token is required.",
  618 + "access-token-invalid": "Access token length must be from 1 to 20 characters.",
  619 + "rsa-key": "RSA public key",
  620 + "rsa-key-required": "RSA public key is required.",
  621 + "secret": "Secret",
  622 + "secret-required": "Secret is required.",
  623 + "device-type": "Device type",
  624 + "device-type-required": "Device type is required.",
  625 + "select-device-type": "Select device type",
  626 + "enter-device-type": "Enter device type",
  627 + "any-device": "Any device",
  628 + "no-device-types-matching": "No device types matching '{{entitySubtype}}' were found.",
  629 + "device-type-list-empty": "No device types selected.",
  630 + "device-types": "Device types",
  631 + "name": "Name",
  632 + "name-required": "Name is required.",
  633 + "description": "Description",
  634 + "events": "Events",
  635 + "details": "Details",
  636 + "copyId": "Copy device Id",
  637 + "copyAccessToken": "Copy access token",
  638 + "idCopiedMessage": "Device Id has been copied to clipboard",
  639 + "accessTokenCopiedMessage": "Device access token has been copied to clipboard",
  640 + "assignedToCustomer": "Assigned to customer",
  641 + "unable-delete-device-alias-title": "Unable to delete device alias",
  642 + "unable-delete-device-alias-text": "Device alias '{{deviceAlias}}' can't be deleted as it used by the following widget(s):<br/>{{widgetsList}}",
  643 + "is-gateway": "Is gateway",
  644 + "public": "Public",
  645 + "device-public": "Device is public",
  646 + "select-device": "Select device"
  647 + },
  648 + "dialog": {
  649 + "close": "Close dialog"
  650 + },
  651 + "error": {
  652 + "unable-to-connect": "Unable to connect to the server! Please check your internet connection.",
  653 + "unhandled-error-code": "Unhandled error code: {{errorCode}}",
  654 + "unknown-error": "Unknown error"
  655 + },
  656 + "entity": {
  657 + "entity": "Entity",
  658 + "entities": "Entities",
  659 + "aliases": "Entity aliases",
  660 + "entity-alias": "Entity alias",
  661 + "unable-delete-entity-alias-title": "Unable to delete entity alias",
  662 + "unable-delete-entity-alias-text": "Entity alias '{{entityAlias}}' can't be deleted as it used by the following widget(s):<br/>{{widgetsList}}",
  663 + "duplicate-alias-error": "Duplicate alias found '{{alias}}'.<br>Entity aliases must be unique whithin the dashboard.",
  664 + "missing-entity-filter-error": "Filter is missing for alias '{{alias}}'.",
  665 + "configure-alias": "Configure '{{alias}}' alias",
  666 + "alias": "Alias",
  667 + "alias-required": "Entity alias is required.",
  668 + "remove-alias": "Remove entity alias",
  669 + "add-alias": "Add entity alias",
  670 + "entity-list": "Entity list",
  671 + "entity-type": "Entity type",
  672 + "entity-types": "Entity types",
  673 + "entity-type-list": "Entity type list",
  674 + "any-entity": "Any entity",
  675 + "enter-entity-type": "Enter entity type",
  676 + "no-entities-matching": "No entities matching '{{entity}}' were found.",
  677 + "no-entity-types-matching": "No entity types matching '{{entityType}}' were found.",
  678 + "name-starts-with": "Name starts with",
  679 + "use-entity-name-filter": "Use filter",
  680 + "entity-list-empty": "No entities selected.",
  681 + "entity-type-list-empty": "No entity types selected.",
  682 + "entity-name-filter-required": "Entity name filter is required.",
  683 + "entity-name-filter-no-entity-matched": "No entities starting with '{{entity}}' were found.",
  684 + "all-subtypes": "All",
  685 + "select-entities": "Select entities",
  686 + "no-aliases-found": "No aliases found.",
  687 + "no-alias-matching": "'{{alias}}' not found.",
  688 + "create-new-alias": "Create a new one!",
  689 + "key": "Key",
  690 + "key-name": "Key name",
  691 + "no-keys-found": "No keys found.",
  692 + "no-key-matching": "'{{key}}' not found.",
  693 + "create-new-key": "Create a new one!",
  694 + "type": "Type",
  695 + "type-required": "Entity type is required.",
  696 + "type-device": "Device",
  697 + "type-devices": "Devices",
  698 + "list-of-devices": "{ count, select, 1 {One device} other {List of # devices} }",
  699 + "device-name-starts-with": "Devices whose names start with '{{prefix}}'",
  700 + "type-asset": "Asset",
  701 + "type-assets": "Assets",
  702 + "list-of-assets": "{ count, select, 1 {One asset} other {List of # assets} }",
  703 + "asset-name-starts-with": "Assets whose names start with '{{prefix}}'",
  704 + "type-rule": "Rule",
  705 + "type-rules": "Rules",
  706 + "list-of-rules": "{ count, select, 1 {One rule} other {List of # rules} }",
  707 + "rule-name-starts-with": "Rules whose names start with '{{prefix}}'",
  708 + "type-plugin": "Plugin",
  709 + "type-plugins": "Plugins",
  710 + "list-of-plugins": "{ count, select, 1 {One plugin} other {List of # plugins} }",
  711 + "plugin-name-starts-with": "Plugins whose names start with '{{prefix}}'",
  712 + "type-tenant": "Tenant",
  713 + "type-tenants": "Tenants",
  714 + "list-of-tenants": "{ count, select, 1 {One tenant} other {List of # tenants} }",
  715 + "tenant-name-starts-with": "Tenants whose names start with '{{prefix}}'",
  716 + "type-customer": "Customer",
  717 + "type-customers": "Customers",
  718 + "list-of-customers": "{ count, select, 1 {One customer} other {List of # customers} }",
  719 + "customer-name-starts-with": "Customers whose names start with '{{prefix}}'",
  720 + "type-user": "User",
  721 + "type-users": "Users",
  722 + "list-of-users": "{ count, select, 1 {One user} other {List of # users} }",
  723 + "user-name-starts-with": "Users whose names start with '{{prefix}}'",
  724 + "type-dashboard": "Dashboard",
  725 + "type-dashboards": "Dashboards",
  726 + "list-of-dashboards": "{ count, select, 1 {One dashboard} other {List of # dashboards} }",
  727 + "dashboard-name-starts-with": "Dashboards whose names start with '{{prefix}}'",
  728 + "type-alarm": "Alarm",
  729 + "type-alarms": "Alarms",
  730 + "list-of-alarms": "{ count, select, 1 {One alarms} other {List of # alarms} }",
  731 + "alarm-name-starts-with": "Alarms whose names start with '{{prefix}}'",
  732 + "type-rulechain": "Rule chain",
  733 + "type-rulechains": "Rule chains",
  734 + "list-of-rulechains": "{ count, select, 1 {One rule chain} other {List of # rule chains} }",
  735 + "rulechain-name-starts-with": "Rule chains whose names start with '{{prefix}}'",
  736 + "type-rulenode": "Rule node",
  737 + "type-rulenodes": "Rule nodes",
  738 + "list-of-rulenodes": "{ count, select, 1 {One rule node} other {List of # rule nodes} }",
  739 + "rulenode-name-starts-with": "Rule nodes whose names start with '{{prefix}}'",
  740 + "type-current-customer": "Current Customer",
  741 + "search": "Search entities",
  742 + "selected-entities": "{ count, select, 1 {1 entity} other {# entities} } selected",
  743 + "entity-name": "Entity name",
  744 + "details": "Entity details",
  745 + "no-entities-prompt": "No entities found",
  746 + "no-data": "No data to display"
  747 + },
  748 + "event": {
  749 + "event-type": "Event type",
  750 + "type-error": "Error",
  751 + "type-lc-event": "Lifecycle event",
  752 + "type-stats": "Statistics",
  753 + "type-debug-rule-node": "Debug",
  754 + "type-debug-rule-chain": "Debug",
  755 + "no-events-prompt": "No events found",
  756 + "error": "Error",
  757 + "alarm": "Alarm",
  758 + "event-time": "Event time",
  759 + "server": "Server",
  760 + "body": "Body",
  761 + "method": "Method",
  762 + "type": "Type",
  763 + "entity": "Entity",
  764 + "message-id": "Message Id",
  765 + "message-type": "Message Type",
  766 + "data-type": "Data Type",
  767 + "relation-type": "Relation Type",
  768 + "metadata": "Metadata",
  769 + "data": "Data",
  770 + "event": "Event",
  771 + "status": "Status",
  772 + "success": "Success",
  773 + "failed": "Failed",
  774 + "messages-processed": "Messages processed",
  775 + "errors-occurred": "Errors occurred"
  776 + },
  777 + "extension": {
  778 + "extensions": "Extensions",
  779 + "selected-extensions": "{ count, select, 1 {1 extension} other {# extensions} } selected",
  780 + "type": "Type",
  781 + "key": "Key",
  782 + "value": "Value",
  783 + "id": "Id",
  784 + "extension-id": "Extension id",
  785 + "extension-type": "Extension type",
  786 + "transformer-json": "JSON *",
  787 + "unique-id-required": "Current extension id already exists.",
  788 + "delete": "Delete extension",
  789 + "add": "Add extension",
  790 + "edit": "Edit extension",
  791 + "delete-extension-title": "Are you sure you want to delete the extension '{{extensionId}}'?",
  792 + "delete-extension-text": "Be careful, after the confirmation the extension and all related data will become unrecoverable.",
  793 + "delete-extensions-title": "Are you sure you want to delete { count, select, 1 {1 extension} other {# extensions} }?",
  794 + "delete-extensions-text": "Be careful, after the confirmation all selected extensions will be removed.",
  795 + "converters": "Converters",
  796 + "converter-id": "Converter id",
  797 + "configuration": "Configuration",
  798 + "converter-configurations": "Converter configurations",
  799 + "token": "Security token",
  800 + "add-converter": "Add converter",
  801 + "add-config": "Add converter configuration",
  802 + "device-name-expression": "Device name expression",
  803 + "device-type-expression": "Device type expression",
  804 + "custom": "Custom",
  805 + "to-double": "To Double",
  806 + "transformer": "Transformer",
  807 + "json-required": "Transformer json is required.",
  808 + "json-parse": "Unable to parse transformer json.",
  809 + "attributes": "Attributes",
  810 + "add-attribute": "Add attribute",
  811 + "add-map": "Add mapping element",
  812 + "timeseries": "Timeseries",
  813 + "add-timeseries": "Add timeseries",
  814 + "field-required": "Field is required",
  815 + "brokers": "Brokers",
  816 + "add-broker": "Add broker",
  817 + "host": "Host",
  818 + "port": "Port",
  819 + "port-range": "Port should be in a range from 1 to 65535.",
  820 + "ssl": "Ssl",
  821 + "credentials": "Credentials",
  822 + "username": "Username",
  823 + "password": "Password",
  824 + "retry-interval": "Retry interval in milliseconds",
  825 + "anonymous": "Anonymous",
  826 + "basic": "Basic",
  827 + "pem": "PEM",
  828 + "ca-cert": "CA certificate file *",
  829 + "private-key": "Private key file *",
  830 + "cert": "Certificate file *",
  831 + "no-file": "No file selected.",
  832 + "drop-file": "Drop a file or click to select a file to upload.",
  833 + "mapping": "Mapping",
  834 + "topic-filter": "Topic filter",
  835 + "converter-type": "Converter type",
  836 + "converter-json": "Json",
  837 + "json-name-expression": "Device name json expression",
  838 + "topic-name-expression": "Device name topic expression",
  839 + "json-type-expression": "Device type json expression",
  840 + "topic-type-expression": "Device type topic expression",
  841 + "attribute-key-expression": "Attribute key expression",
  842 + "attr-json-key-expression": "Attribute key json expression",
  843 + "attr-topic-key-expression": "Attribute key topic expression",
  844 + "request-id-expression": "Request id expression",
  845 + "request-id-json-expression": "Request id json expression",
  846 + "request-id-topic-expression": "Request id topic expression",
  847 + "response-topic-expression": "Response topic expression",
  848 + "value-expression": "Value expression",
  849 + "topic": "Topic",
  850 + "timeout": "Timeout in milliseconds",
  851 + "converter-json-required": "Converter json is required.",
  852 + "converter-json-parse": "Unable to parse converter json.",
  853 + "filter-expression": "Filter expression",
  854 + "connect-requests": "Connect requests",
  855 + "add-connect-request": "Add connect request",
  856 + "disconnect-requests": "Disconnect requests",
  857 + "add-disconnect-request": "Add disconnect request",
  858 + "attribute-requests": "Attribute requests",
  859 + "add-attribute-request": "Add attribute request",
  860 + "attribute-updates": "Attribute updates",
  861 + "add-attribute-update": "Add attribute update",
  862 + "server-side-rpc": "Server side RPC",
  863 + "add-server-side-rpc-request": "Add server-side RPC request",
  864 + "device-name-filter": "Device name filter",
  865 + "attribute-filter": "Attribute filter",
  866 + "method-filter": "Method filter",
  867 + "request-topic-expression": "Request topic expression",
  868 + "response-timeout": "Response timeout in milliseconds",
  869 + "topic-expression": "Topic expression",
  870 + "client-scope": "Client scope",
  871 + "add-device": "Add device",
  872 + "opc-server": "Servers",
  873 + "opc-add-server": "Add server",
  874 + "opc-add-server-prompt": "Please add server",
  875 + "opc-application-name": "Application name",
  876 + "opc-application-uri": "Application uri",
  877 + "opc-scan-period-in-seconds": "Scan period in seconds",
  878 + "opc-security": "Security",
  879 + "opc-identity": "Identity",
  880 + "opc-keystore": "Keystore",
  881 + "opc-type": "Type",
  882 + "opc-keystore-type": "Type",
  883 + "opc-keystore-location": "Location *",
  884 + "opc-keystore-password": "Password",
  885 + "opc-keystore-alias": "Alias",
  886 + "opc-keystore-key-password": "Key password",
  887 + "opc-device-node-pattern": "Device node pattern",
  888 + "opc-device-name-pattern": "Device name pattern",
  889 + "modbus-server": "Servers/slaves",
  890 + "modbus-add-server": "Add server/slave",
  891 + "modbus-add-server-prompt": "Please add server/slave",
  892 + "modbus-transport": "Transport",
  893 + "modbus-port-name": "Serial port name",
  894 + "modbus-encoding": "Encoding",
  895 + "modbus-parity": "Parity",
  896 + "modbus-baudrate": "Baud rate",
  897 + "modbus-databits": "Data bits",
  898 + "modbus-stopbits": "Stop bits",
  899 + "modbus-databits-range": "Data bits should be in a range from 7 to 8.",
  900 + "modbus-stopbits-range": "Stop bits should be in a range from 1 to 2.",
  901 + "modbus-unit-id": "Unit ID",
  902 + "modbus-unit-id-range": "Unit ID should be in a range from 1 to 247.",
  903 + "modbus-device-name": "Device name",
  904 + "modbus-poll-period": "Poll period (ms)",
  905 + "modbus-attributes-poll-period": "Attributes poll period (ms)",
  906 + "modbus-timeseries-poll-period": "Timeseries poll period (ms)",
  907 + "modbus-poll-period-range": "Poll period should be positive value.",
  908 + "modbus-tag": "Tag",
  909 + "modbus-function": "Function",
  910 + "modbus-register-address": "Register address",
  911 + "modbus-register-address-range": "Register address should be in a range from 0 to 65535.",
  912 + "modbus-register-bit-index": "Bit index",
  913 + "modbus-register-bit-index-range": "Bit index should be in a range from 0 to 15.",
  914 + "modbus-register-count": "Register count",
  915 + "modbus-register-count-range": "Register count should be a positive value.",
  916 + "modbus-byte-order": "Byte order",
17 917
18   -export default angular.module('thingsboard.locale', [])
19   - .factory('tbMissingTranslationHandler', ThingsboardMissingTranslateHandler)
20   - .constant('locales',
21   - {
22   - 'en_US': {
23   - "access": {
24   - "unauthorized": "Unauthorized",
25   - "unauthorized-access": "Unauthorized Access",
26   - "unauthorized-access-text": "You should sign in to have access to this resource!",
27   - "access-forbidden": "Access Forbidden",
28   - "access-forbidden-text": "You haven't access rights to this location!<br/>Try to sign in with different user if you still wish to gain access to this location.",
29   - "refresh-token-expired": "Session has expired",
30   - "refresh-token-failed": "Unable to refresh session"
31   - },
32   - "action": {
33   - "activate": "Activate",
34   - "suspend": "Suspend",
35   - "save": "Save",
36   - "saveAs": "Save as",
37   - "cancel": "Cancel",
38   - "ok": "OK",
39   - "delete": "Delete",
40   - "add": "Add",
41   - "yes": "Yes",
42   - "no": "No",
43   - "update": "Update",
44   - "remove": "Remove",
45   - "search": "Search",
46   - "clear-search": "Clear search",
47   - "assign": "Assign",
48   - "unassign": "Unassign",
49   - "share": "Share",
50   - "make-private": "Make private",
51   - "apply": "Apply",
52   - "apply-changes": "Apply changes",
53   - "edit-mode": "Edit mode",
54   - "enter-edit-mode": "Enter edit mode",
55   - "decline-changes": "Decline changes",
56   - "close": "Close",
57   - "back": "Back",
58   - "run": "Run",
59   - "sign-in": "Sign in!",
60   - "edit": "Edit",
61   - "view": "View",
62   - "create": "Create",
63   - "drag": "Drag",
64   - "refresh": "Refresh",
65   - "undo": "Undo",
66   - "copy": "Copy",
67   - "paste": "Paste",
68   - "copy-reference": "Copy reference",
69   - "paste-reference": "Paste reference",
70   - "import": "Import",
71   - "export": "Export",
72   - "share-via": "Share via {{provider}}"
73   - },
74   - "aggregation": {
75   - "aggregation": "Aggregation",
76   - "function": "Data aggregation function",
77   - "limit": "Max values",
78   - "group-interval": "Grouping interval",
79   - "min": "Min",
80   - "max": "Max",
81   - "avg": "Average",
82   - "sum": "Sum",
83   - "count": "Count",
84   - "none": "None"
85   - },
86   - "admin": {
87   - "general": "General",
88   - "general-settings": "General Settings",
89   - "outgoing-mail": "Outgoing Mail",
90   - "outgoing-mail-settings": "Outgoing Mail Settings",
91   - "system-settings": "System Settings",
92   - "test-mail-sent": "Test mail was successfully sent!",
93   - "base-url": "Base URL",
94   - "base-url-required": "Base URL is required.",
95   - "mail-from": "Mail From",
96   - "mail-from-required": "Mail From is required.",
97   - "smtp-protocol": "SMTP protocol",
98   - "smtp-host": "SMTP host",
99   - "smtp-host-required": "SMTP host is required.",
100   - "smtp-port": "SMTP port",
101   - "smtp-port-required": "You must supply a smtp port.",
102   - "smtp-port-invalid": "That doesn't look like a valid smtp port.",
103   - "timeout-msec": "Timeout (msec)",
104   - "timeout-required": "Timeout is required.",
105   - "timeout-invalid": "That doesn't look like a valid timeout.",
106   - "enable-tls": "Enable TLS",
107   - "send-test-mail": "Send test mail"
108   - },
109   - "alarm": {
110   - "alarm": "Alarm",
111   - "alarms": "Alarms",
112   - "select-alarm": "Select alarm",
113   - "no-alarms-matching": "No alarms matching '{{entity}}' were found.",
114   - "alarm-required": "Alarm is required",
115   - "alarm-status": "Alarm status",
116   - "search-status": {
117   - "ANY": "Any",
118   - "ACTIVE": "Active",
119   - "CLEARED": "Cleared",
120   - "ACK": "Acknowledged",
121   - "UNACK": "Unacknowledged"
122   - },
123   - "display-status": {
124   - "ACTIVE_UNACK": "Active Unacknowledged",
125   - "ACTIVE_ACK": "Active Acknowledged",
126   - "CLEARED_UNACK": "Cleared Unacknowledged",
127   - "CLEARED_ACK": "Cleared Acknowledged"
128   - },
129   - "no-alarms-prompt": "No alarms found",
130   - "created-time": "Created time",
131   - "type": "Type",
132   - "severity": "Severity",
133   - "originator": "Originator",
134   - "originator-type": "Originator type",
135   - "details": "Details",
136   - "status": "Status",
137   - "alarm-details": "Alarm details",
138   - "start-time": "Start time",
139   - "end-time": "End time",
140   - "ack-time": "Acknowledged time",
141   - "clear-time": "Cleared time",
142   - "severity-critical": "Critical",
143   - "severity-major": "Major",
144   - "severity-minor": "Minor",
145   - "severity-warning": "Warning",
146   - "severity-indeterminate": "Indeterminate",
147   - "acknowledge": "Acknowledge",
148   - "clear": "Clear",
149   - "search": "Search alarms",
150   - "selected-alarms": "{ count, select, 1 {1 alarm} other {# alarms} } selected",
151   - "no-data": "No data to display",
152   - "polling-interval": "Alarms polling interval (sec)",
153   - "polling-interval-required": "Alarms polling interval is required.",
154   - "min-polling-interval-message": "At least 1 sec polling interval is allowed.",
155   - "aknowledge-alarms-title": "Acknowledge { count, select, 1 {1 alarm} other {# alarms} }",
156   - "aknowledge-alarms-text": "Are you sure you want to acknowledge { count, select, 1 {1 alarm} other {# alarms} }?",
157   - "clear-alarms-title": "Clear { count, select, 1 {1 alarm} other {# alarms} }",
158   - "clear-alarms-text": "Are you sure you want to clear { count, select, 1 {1 alarm} other {# alarms} }?"
159   - },
160   - "alias": {
161   - "add": "Add alias",
162   - "edit": "Edit alias",
163   - "name": "Alias name",
164   - "name-required": "Alias name is required",
165   - "duplicate-alias": "Alias with same name is already exists.",
166   - "filter-type-single-entity": "Single entity",
167   - "filter-type-entity-list": "Entity list",
168   - "filter-type-entity-name": "Entity name",
169   - "filter-type-state-entity": "Entity from dashboard state",
170   - "filter-type-state-entity-description": "Entity taken from dashboard state parameters",
171   - "filter-type-asset-type": "Asset type",
172   - "filter-type-asset-type-description": "Assets of type '{{assetType}}'",
173   - "filter-type-asset-type-and-name-description": "Assets of type '{{assetType}}' and with name starting with '{{prefix}}'",
174   - "filter-type-device-type": "Device type",
175   - "filter-type-device-type-description": "Devices of type '{{deviceType}}'",
176   - "filter-type-device-type-and-name-description": "Devices of type '{{deviceType}}' and with name starting with '{{prefix}}'",
177   - "filter-type-relations-query": "Relations query",
178   - "filter-type-relations-query-description": "{{entities}} that have {{relationType}} relation {{direction}} {{rootEntity}}",
179   - "filter-type-asset-search-query": "Asset search query",
180   - "filter-type-asset-search-query-description": "Assets with types {{assetTypes}} that have {{relationType}} relation {{direction}} {{rootEntity}}",
181   - "filter-type-device-search-query": "Device search query",
182   - "filter-type-device-search-query-description": "Devices with types {{deviceTypes}} that have {{relationType}} relation {{direction}} {{rootEntity}}",
183   - "entity-filter": "Entity filter",
184   - "resolve-multiple": "Resolve as multiple entities",
185   - "filter-type": "Filter type",
186   - "filter-type-required": "Filter type is required.",
187   - "entity-filter-no-entity-matched": "No entities matching specified filter were found.",
188   - "no-entity-filter-specified": "No entity filter specified",
189   - "root-state-entity": "Use dashboard state entity as root",
190   - "root-entity": "Root entity",
191   - "state-entity-parameter-name": "State entity parameter name",
192   - "default-state-entity": "Default state entity",
193   - "default-entity-parameter-name": "By default",
194   - "max-relation-level": "Max relation level",
195   - "unlimited-level": "Unlimited level",
196   - "state-entity": "Dashboard state entity",
197   - "all-entities": "All entities",
198   - "any-relation": "any"
199   - },
200   - "asset": {
201   - "asset": "Asset",
202   - "assets": "Assets",
203   - "management": "Asset management",
204   - "view-assets": "View Assets",
205   - "add": "Add Asset",
206   - "assign-to-customer": "Assign to customer",
207   - "assign-asset-to-customer": "Assign Asset(s) To Customer",
208   - "assign-asset-to-customer-text": "Please select the assets to assign to the customer",
209   - "no-assets-text": "No assets found",
210   - "assign-to-customer-text": "Please select the customer to assign the asset(s)",
211   - "public": "Public",
212   - "assignedToCustomer": "Assigned to customer",
213   - "make-public": "Make asset public",
214   - "make-private": "Make asset private",
215   - "unassign-from-customer": "Unassign from customer",
216   - "delete": "Delete asset",
217   - "asset-public": "Asset is public",
218   - "asset-type": "Asset type",
219   - "asset-type-required": "Asset type is required.",
220   - "select-asset-type": "Select asset type",
221   - "enter-asset-type": "Enter asset type",
222   - "any-asset": "Any asset",
223   - "no-asset-types-matching": "No asset types matching '{{entitySubtype}}' were found.",
224   - "asset-type-list-empty": "No asset types selected.",
225   - "asset-types": "Asset types",
226   - "name": "Name",
227   - "name-required": "Name is required.",
228   - "description": "Description",
229   - "type": "Type",
230   - "type-required": "Type is required.",
231   - "details": "Details",
232   - "events": "Events",
233   - "add-asset-text": "Add new asset",
234   - "asset-details": "Asset details",
235   - "assign-assets": "Assign assets",
236   - "assign-assets-text": "Assign { count, select, 1 {1 asset} other {# assets} } to customer",
237   - "delete-assets": "Delete assets",
238   - "unassign-assets": "Unassign assets",
239   - "unassign-assets-action-title": "Unassign { count, select, 1 {1 asset} other {# assets} } from customer",
240   - "assign-new-asset": "Assign new asset",
241   - "delete-asset-title": "Are you sure you want to delete the asset '{{assetName}}'?",
242   - "delete-asset-text": "Be careful, after the confirmation the asset and all related data will become unrecoverable.",
243   - "delete-assets-title": "Are you sure you want to delete { count, select, 1 {1 asset} other {# assets} }?",
244   - "delete-assets-action-title": "Delete { count, select, 1 {1 asset} other {# assets} }",
245   - "delete-assets-text": "Be careful, after the confirmation all selected assets will be removed and all related data will become unrecoverable.",
246   - "make-public-asset-title": "Are you sure you want to make the asset '{{assetName}}' public?",
247   - "make-public-asset-text": "After the confirmation the asset and all its data will be made public and accessible by others.",
248   - "make-private-asset-title": "Are you sure you want to make the asset '{{assetName}}' private?",
249   - "make-private-asset-text": "After the confirmation the asset and all its data will be made private and won't be accessible by others.",
250   - "unassign-asset-title": "Are you sure you want to unassign the asset '{{assetName}}'?",
251   - "unassign-asset-text": "After the confirmation the asset will be unassigned and won't be accessible by the customer.",
252   - "unassign-asset": "Unassign asset",
253   - "unassign-assets-title": "Are you sure you want to unassign { count, select, 1 {1 asset} other {# assets} }?",
254   - "unassign-assets-text": "After the confirmation all selected assets will be unassigned and won't be accessible by the customer.",
255   - "copyId": "Copy asset Id",
256   - "idCopiedMessage": "Asset Id has been copied to clipboard",
257   - "select-asset": "Select asset",
258   - "no-assets-matching": "No assets matching '{{entity}}' were found.",
259   - "asset-required": "Asset is required",
260   - "name-starts-with": "Asset name starts with"
261   - },
262   - "attribute": {
263   - "attributes": "Attributes",
264   - "latest-telemetry": "Latest telemetry",
265   - "attributes-scope": "Entity attributes scope",
266   - "scope-latest-telemetry": "Latest telemetry",
267   - "scope-client": "Client attributes",
268   - "scope-server": "Server attributes",
269   - "scope-shared": "Shared attributes",
270   - "add": "Add attribute",
271   - "key": "Key",
272   - "last-update-time": "Last update time",
273   - "key-required": "Attribute key is required.",
274   - "value": "Value",
275   - "value-required": "Attribute value is required.",
276   - "delete-attributes-title": "Are you sure you want to delete { count, select, 1 {1 attribute} other {# attributes} }?",
277   - "delete-attributes-text": "Be careful, after the confirmation all selected attributes will be removed.",
278   - "delete-attributes": "Delete attributes",
279   - "enter-attribute-value": "Enter attribute value",
280   - "show-on-widget": "Show on widget",
281   - "widget-mode": "Widget mode",
282   - "next-widget": "Next widget",
283   - "prev-widget": "Previous widget",
284   - "add-to-dashboard": "Add to dashboard",
285   - "add-widget-to-dashboard": "Add widget to dashboard",
286   - "selected-attributes": "{ count, select, 1 {1 attribute} other {# attributes} } selected",
287   - "selected-telemetry": "{ count, select, 1 {1 telemetry unit} other {# telemetry units} } selected"
288   - },
289   - "audit-log": {
290   - "audit": "Audit",
291   - "audit-logs": "Audit Logs",
292   - "timestamp": "Timestamp",
293   - "entity-type": "Entity Type",
294   - "entity-name": "Entity Name",
295   - "user": "User",
296   - "type": "Type",
297   - "status": "Status",
298   - "details": "Details",
299   - "type-added": "Added",
300   - "type-deleted": "Deleted",
301   - "type-updated": "Updated",
302   - "type-attributes-updated": "Attributes updated",
303   - "type-attributes-deleted": "Attributes deleted",
304   - "type-rpc-call": "RPC call",
305   - "type-credentials-updated": "Credentials updated",
306   - "type-assigned-to-customer": "Assigned to Customer",
307   - "type-unassigned-from-customer": "Unassigned from Customer",
308   - "type-activated": "Activated",
309   - "type-suspended": "Suspended",
310   - "type-credentials-read": "Credentials read",
311   - "type-attributes-read": "Attributes read",
312   - "status-success": "Success",
313   - "status-failure": "Failure",
314   - "audit-log-details": "Audit log details",
315   - "no-audit-logs-prompt": "No logs found",
316   - "action-data": "Action data",
317   - "failure-details": "Failure details",
318   - "search": "Search audit logs",
319   - "clear-search": "Clear search"
320   - },
321   - "confirm-on-exit": {
322   - "message": "You have unsaved changes. Are you sure you want to leave this page?",
323   - "html-message": "You have unsaved changes.<br/>Are you sure you want to leave this page?",
324   - "title": "Unsaved changes"
325   - },
326   - "contact": {
327   - "country": "Country",
328   - "city": "City",
329   - "state": "State / Province",
330   - "postal-code": "Zip / Postal Code",
331   - "postal-code-invalid": "Invalid Zip / Postal Code format.",
332   - "address": "Address",
333   - "address2": "Address 2",
334   - "phone": "Phone",
335   - "email": "Email",
336   - "no-address": "No address"
337   - },
338   - "common": {
339   - "username": "Username",
340   - "password": "Password",
341   - "enter-username": "Enter username",
342   - "enter-password": "Enter password",
343   - "enter-search": "Enter search"
344   - },
345   - "content-type": {
346   - "json": "Json",
347   - "text": "Text",
348   - "binary": "Binary (Base64)"
349   - },
350   - "customer": {
351   - "customer": "Customer",
352   - "customers": "Customers",
353   - "management": "Customer management",
354   - "dashboard": "Customer Dashboard",
355   - "dashboards": "Customer Dashboards",
356   - "devices": "Customer Devices",
357   - "assets": "Customer Assets",
358   - "public-dashboards": "Public Dashboards",
359   - "public-devices": "Public Devices",
360   - "public-assets": "Public Assets",
361   - "add": "Add Customer",
362   - "delete": "Delete customer",
363   - "manage-customer-users": "Manage customer users",
364   - "manage-customer-devices": "Manage customer devices",
365   - "manage-customer-dashboards": "Manage customer dashboards",
366   - "manage-public-devices": "Manage public devices",
367   - "manage-public-dashboards": "Manage public dashboards",
368   - "manage-customer-assets": "Manage customer assets",
369   - "manage-public-assets": "Manage public assets",
370   - "add-customer-text": "Add new customer",
371   - "no-customers-text": "No customers found",
372   - "customer-details": "Customer details",
373   - "delete-customer-title": "Are you sure you want to delete the customer '{{customerTitle}}'?",
374   - "delete-customer-text": "Be careful, after the confirmation the customer and all related data will become unrecoverable.",
375   - "delete-customers-title": "Are you sure you want to delete { count, select, 1 {1 customer} other {# customers} }?",
376   - "delete-customers-action-title": "Delete { count, select, 1 {1 customer} other {# customers} }",
377   - "delete-customers-text": "Be careful, after the confirmation all selected customers will be removed and all related data will become unrecoverable.",
378   - "manage-users": "Manage users",
379   - "manage-assets": "Manage assets",
380   - "manage-devices": "Manage devices",
381   - "manage-dashboards": "Manage dashboards",
382   - "title": "Title",
383   - "title-required": "Title is required.",
384   - "description": "Description",
385   - "details": "Details",
386   - "events": "Events",
387   - "copyId": "Copy customer Id",
388   - "idCopiedMessage": "Customer Id has been copied to clipboard",
389   - "select-customer": "Select customer",
390   - "no-customers-matching": "No customers matching '{{entity}}' were found.",
391   - "customer-required": "Customer is required",
392   - "select-default-customer": "Select default customer",
393   - "default-customer": "Default customer",
394   - "default-customer-required": "Default customer is required in order to debug dashboard on Tenant level"
395   - },
396   - "datetime": {
397   - "date-from": "Date from",
398   - "time-from": "Time from",
399   - "date-to": "Date to",
400   - "time-to": "Time to"
401   - },
402   - "dashboard": {
403   - "dashboard": "Dashboard",
404   - "dashboards": "Dashboards",
405   - "management": "Dashboard management",
406   - "view-dashboards": "View Dashboards",
407   - "add": "Add Dashboard",
408   - "assign-dashboard-to-customer": "Assign Dashboard(s) To Customer",
409   - "assign-dashboard-to-customer-text": "Please select the dashboards to assign to the customer",
410   - "assign-to-customer-text": "Please select the customer to assign the dashboard(s)",
411   - "assign-to-customer": "Assign to customer",
412   - "unassign-from-customer": "Unassign from customer",
413   - "make-public": "Make dashboard public",
414   - "make-private": "Make dashboard private",
415   - "manage-assigned-customers": "Manage assigned customers",
416   - "assigned-customers": "Assigned customers",
417   - "assign-to-customers": "Assign Dashboard(s) To Customers",
418   - "assign-to-customers-text": "Please select the customers to assign the dashboard(s)",
419   - "unassign-from-customers": "Unassign Dashboard(s) From Customers",
420   - "unassign-from-customers-text": "Please select the customers to unassign from the dashboard(s)",
421   - "no-dashboards-text": "No dashboards found",
422   - "no-widgets": "No widgets configured",
423   - "add-widget": "Add new widget",
424   - "title": "Title",
425   - "select-widget-title": "Select widget",
426   - "select-widget-subtitle": "List of available widget types",
427   - "delete": "Delete dashboard",
428   - "title-required": "Title is required.",
429   - "description": "Description",
430   - "details": "Details",
431   - "dashboard-details": "Dashboard details",
432   - "add-dashboard-text": "Add new dashboard",
433   - "assign-dashboards": "Assign dashboards",
434   - "assign-new-dashboard": "Assign new dashboard",
435   - "assign-dashboards-text": "Assign { count, select, 1 {1 dashboard} other {# dashboards} } to customers",
436   - "unassign-dashboards-action-text": "Unassign { count, select, 1 {1 dashboard} other {# dashboards} } from customers",
437   - "delete-dashboards": "Delete dashboards",
438   - "unassign-dashboards": "Unassign dashboards",
439   - "unassign-dashboards-action-title": "Unassign { count, select, 1 {1 dashboard} other {# dashboards} } from customer",
440   - "delete-dashboard-title": "Are you sure you want to delete the dashboard '{{dashboardTitle}}'?",
441   - "delete-dashboard-text": "Be careful, after the confirmation the dashboard and all related data will become unrecoverable.",
442   - "delete-dashboards-title": "Are you sure you want to delete { count, select, 1 {1 dashboard} other {# dashboards} }?",
443   - "delete-dashboards-action-title": "Delete { count, select, 1 {1 dashboard} other {# dashboards} }",
444   - "delete-dashboards-text": "Be careful, after the confirmation all selected dashboards will be removed and all related data will become unrecoverable.",
445   - "unassign-dashboard-title": "Are you sure you want to unassign the dashboard '{{dashboardTitle}}'?",
446   - "unassign-dashboard-text": "After the confirmation the dashboard will be unassigned and won't be accessible by the customer.",
447   - "unassign-dashboard": "Unassign dashboard",
448   - "unassign-dashboards-title": "Are you sure you want to unassign { count, select, 1 {1 dashboard} other {# dashboards} }?",
449   - "unassign-dashboards-text": "After the confirmation all selected dashboards will be unassigned and won't be accessible by the customer.",
450   - "public-dashboard-title": "Dashboard is now public",
451   - "public-dashboard-text": "Your dashboard <b>{{dashboardTitle}}</b> is now public and accessible via next public <a href='{{publicLink}}' target='_blank'>link</a>:",
452   - "public-dashboard-notice": "<b>Note:</b> Do not forget to make related devices public in order to access their data.",
453   - "make-private-dashboard-title": "Are you sure you want to make the dashboard '{{dashboardTitle}}' private?",
454   - "make-private-dashboard-text": "After the confirmation the dashboard will be made private and won't be accessible by others.",
455   - "make-private-dashboard": "Make dashboard private",
456   - "socialshare-text": "'{{dashboardTitle}}' powered by ThingsBoard",
457   - "socialshare-title": "'{{dashboardTitle}}' powered by ThingsBoard",
458   - "select-dashboard": "Select dashboard",
459   - "no-dashboards-matching": "No dashboards matching '{{entity}}' were found.",
460   - "dashboard-required": "Dashboard is required.",
461   - "select-existing": "Select existing dashboard",
462   - "create-new": "Create new dashboard",
463   - "new-dashboard-title": "New dashboard title",
464   - "open-dashboard": "Open dashboard",
465   - "set-background": "Set background",
466   - "background-color": "Background color",
467   - "background-image": "Background image",
468   - "background-size-mode": "Background size mode",
469   - "no-image": "No image selected",
470   - "drop-image": "Drop an image or click to select a file to upload.",
471   - "settings": "Settings",
472   - "columns-count": "Columns count",
473   - "columns-count-required": "Columns count is required.",
474   - "min-columns-count-message": "Only 10 minimum column count is allowed.",
475   - "max-columns-count-message": "Only 1000 maximum column count is allowed.",
476   - "widgets-margins": "Margin between widgets",
477   - "horizontal-margin": "Horizontal margin",
478   - "horizontal-margin-required": "Horizontal margin value is required.",
479   - "min-horizontal-margin-message": "Only 0 is allowed as minimum horizontal margin value.",
480   - "max-horizontal-margin-message": "Only 50 is allowed as maximum horizontal margin value.",
481   - "vertical-margin": "Vertical margin",
482   - "vertical-margin-required": "Vertical margin value is required.",
483   - "min-vertical-margin-message": "Only 0 is allowed as minimum vertical margin value.",
484   - "max-vertical-margin-message": "Only 50 is allowed as maximum vertical margin value.",
485   - "autofill-height": "Auto fill layout height",
486   - "mobile-layout": "Mobile layout settings",
487   - "mobile-row-height": "Mobile row height, px",
488   - "mobile-row-height-required": "Mobile row height value is required.",
489   - "min-mobile-row-height-message": "Only 5 pixels is allowed as minimum mobile row height value.",
490   - "max-mobile-row-height-message": "Only 200 pixels is allowed as maximum mobile row height value.",
491   - "display-title": "Display dashboard title",
492   - "toolbar-always-open": "Keep toolbar opened",
493   - "title-color": "Title color",
494   - "display-dashboards-selection": "Display dashboards selection",
495   - "display-entities-selection": "Display entities selection",
496   - "display-dashboard-timewindow": "Display timewindow",
497   - "display-dashboard-export": "Display export",
498   - "import": "Import dashboard",
499   - "export": "Export dashboard",
500   - "export-failed-error": "Unable to export dashboard: {{error}}",
501   - "create-new-dashboard": "Create new dashboard",
502   - "dashboard-file": "Dashboard file",
503   - "invalid-dashboard-file-error": "Unable to import dashboard: Invalid dashboard data structure.",
504   - "dashboard-import-missing-aliases-title": "Configure aliases used by imported dashboard",
505   - "create-new-widget": "Create new widget",
506   - "import-widget": "Import widget",
507   - "widget-file": "Widget file",
508   - "invalid-widget-file-error": "Unable to import widget: Invalid widget data structure.",
509   - "widget-import-missing-aliases-title": "Configure aliases used by imported widget",
510   - "open-toolbar": "Open dashboard toolbar",
511   - "close-toolbar": "Close toolbar",
512   - "configuration-error": "Configuration error",
513   - "alias-resolution-error-title": "Dashboard aliases configuration error",
514   - "invalid-aliases-config": "Unable to find any devices matching to some of the aliases filter.<br/>" +
515   - "Please contact your administrator in order to resolve this issue.",
516   - "select-devices": "Select devices",
517   - "assignedToCustomer": "Assigned to customer",
518   - "assignedToCustomers": "Assigned to customers",
519   - "public": "Public",
520   - "public-link": "Public link",
521   - "copy-public-link": "Copy public link",
522   - "public-link-copied-message": "Dashboard public link has been copied to clipboard",
523   - "manage-states": "Manage dashboard states",
524   - "states": "Dashboard states",
525   - "search-states": "Search dashboard states",
526   - "selected-states": "{ count, select, 1 {1 dashboard state} other {# dashboard states} } selected",
527   - "edit-state": "Edit dashboard state",
528   - "delete-state": "Delete dashboard state",
529   - "add-state": "Add dashboard state",
530   - "state": "Dashboard state",
531   - "state-name": "Name",
532   - "state-name-required": "Dashboard state name is required.",
533   - "state-id": "State Id",
534   - "state-id-required": "Dashboard state id is required.",
535   - "state-id-exists": "Dashboard state with the same id is already exists.",
536   - "is-root-state": "Root state",
537   - "delete-state-title": "Delete dashboard state",
538   - "delete-state-text": "Are you sure you want delete dashboard state with name '{{stateName}}'?",
539   - "show-details": "Show details",
540   - "hide-details": "Hide details",
541   - "select-state": "Select target state",
542   - "state-controller": "State controller"
543   - },
544   - "datakey": {
545   - "settings": "Settings",
546   - "advanced": "Advanced",
547   - "label": "Label",
548   - "color": "Color",
549   - "units": "Special symbol to show next to value",
550   - "decimals": "Number of digits after floating point",
551   - "data-generation-func": "Data generation function",
552   - "use-data-post-processing-func": "Use data post-processing function",
553   - "configuration": "Data key configuration",
554   - "timeseries": "Timeseries",
555   - "attributes": "Attributes",
556   - "alarm": "Alarm fields",
557   - "timeseries-required": "Entity timeseries are required.",
558   - "timeseries-or-attributes-required": "Entity timeseries/attributes are required.",
559   - "maximum-timeseries-or-attributes": "Maximum { count, select, 1 {1 timeseries/attribute is allowed.} other {# timeseries/attributes are allowed} }",
560   - "alarm-fields-required": "Alarm fields are required.",
561   - "function-types": "Function types",
562   - "function-types-required": "Function types are required.",
563   - "maximum-function-types": "Maximum { count, select, 1 {1 function type is allowed.} other {# function types are allowed} }"
564   - },
565   - "datasource": {
566   - "type": "Datasource type",
567   - "name": "Name",
568   - "add-datasource-prompt": "Please add datasource"
569   - },
570   - "details": {
571   - "edit-mode": "Edit mode",
572   - "toggle-edit-mode": "Toggle edit mode"
573   - },
574   - "device": {
575   - "device": "Device",
576   - "device-required": "Device is required.",
577   - "devices": "Devices",
578   - "management": "Device management",
579   - "view-devices": "View Devices",
580   - "device-alias": "Device alias",
581   - "aliases": "Device aliases",
582   - "no-alias-matching": "'{{alias}}' not found.",
583   - "no-aliases-found": "No aliases found.",
584   - "no-key-matching": "'{{key}}' not found.",
585   - "no-keys-found": "No keys found.",
586   - "create-new-alias": "Create a new one!",
587   - "create-new-key": "Create a new one!",
588   - "duplicate-alias-error": "Duplicate alias found '{{alias}}'.<br>Device aliases must be unique whithin the dashboard.",
589   - "configure-alias": "Configure '{{alias}}' alias",
590   - "no-devices-matching": "No devices matching '{{entity}}' were found.",
591   - "alias": "Alias",
592   - "alias-required": "Device alias is required.",
593   - "remove-alias": "Remove device alias",
594   - "add-alias": "Add device alias",
595   - "name-starts-with": "Device name starts with",
596   - "device-list": "Device list",
597   - "use-device-name-filter": "Use filter",
598   - "device-list-empty": "No devices selected.",
599   - "device-name-filter-required": "Device name filter is required.",
600   - "device-name-filter-no-device-matched": "No devices starting with '{{device}}' were found.",
601   - "add": "Add Device",
602   - "assign-to-customer": "Assign to customer",
603   - "assign-device-to-customer": "Assign Device(s) To Customer",
604   - "assign-device-to-customer-text": "Please select the devices to assign to the customer",
605   - "make-public": "Make device public",
606   - "make-private": "Make device private",
607   - "no-devices-text": "No devices found",
608   - "assign-to-customer-text": "Please select the customer to assign the device(s)",
609   - "device-details": "Device details",
610   - "add-device-text": "Add new device",
611   - "credentials": "Credentials",
612   - "manage-credentials": "Manage credentials",
613   - "delete": "Delete device",
614   - "assign-devices": "Assign devices",
615   - "assign-devices-text": "Assign { count, select, 1 {1 device} other {# devices} } to customer",
616   - "delete-devices": "Delete devices",
617   - "unassign-from-customer": "Unassign from customer",
618   - "unassign-devices": "Unassign devices",
619   - "unassign-devices-action-title": "Unassign { count, select, 1 {1 device} other {# devices} } from customer",
620   - "assign-new-device": "Assign new device",
621   - "make-public-device-title": "Are you sure you want to make the device '{{deviceName}}' public?",
622   - "make-public-device-text": "After the confirmation the device and all its data will be made public and accessible by others.",
623   - "make-private-device-title": "Are you sure you want to make the device '{{deviceName}}' private?",
624   - "make-private-device-text": "After the confirmation the device and all its data will be made private and won't be accessible by others.",
625   - "view-credentials": "View credentials",
626   - "delete-device-title": "Are you sure you want to delete the device '{{deviceName}}'?",
627   - "delete-device-text": "Be careful, after the confirmation the device and all related data will become unrecoverable.",
628   - "delete-devices-title": "Are you sure you want to delete { count, select, 1 {1 device} other {# devices} }?",
629   - "delete-devices-action-title": "Delete { count, select, 1 {1 device} other {# devices} }",
630   - "delete-devices-text": "Be careful, after the confirmation all selected devices will be removed and all related data will become unrecoverable.",
631   - "unassign-device-title": "Are you sure you want to unassign the device '{{deviceName}}'?",
632   - "unassign-device-text": "After the confirmation the device will be unassigned and won't be accessible by the customer.",
633   - "unassign-device": "Unassign device",
634   - "unassign-devices-title": "Are you sure you want to unassign { count, select, 1 {1 device} other {# devices} }?",
635   - "unassign-devices-text": "After the confirmation all selected devices will be unassigned and won't be accessible by the customer.",
636   - "device-credentials": "Device Credentials",
637   - "credentials-type": "Credentials type",
638   - "access-token": "Access token",
639   - "access-token-required": "Access token is required.",
640   - "access-token-invalid": "Access token length must be from 1 to 20 characters.",
641   - "rsa-key": "RSA public key",
642   - "rsa-key-required": "RSA public key is required.",
643   - "secret": "Secret",
644   - "secret-required": "Secret is required.",
645   - "device-type": "Device type",
646   - "device-type-required": "Device type is required.",
647   - "select-device-type": "Select device type",
648   - "enter-device-type": "Enter device type",
649   - "any-device": "Any device",
650   - "no-device-types-matching": "No device types matching '{{entitySubtype}}' were found.",
651   - "device-type-list-empty": "No device types selected.",
652   - "device-types": "Device types",
653   - "name": "Name",
654   - "name-required": "Name is required.",
655   - "description": "Description",
656   - "events": "Events",
657   - "details": "Details",
658   - "copyId": "Copy device Id",
659   - "copyAccessToken": "Copy access token",
660   - "idCopiedMessage": "Device Id has been copied to clipboard",
661   - "accessTokenCopiedMessage": "Device access token has been copied to clipboard",
662   - "assignedToCustomer": "Assigned to customer",
663   - "unable-delete-device-alias-title": "Unable to delete device alias",
664   - "unable-delete-device-alias-text": "Device alias '{{deviceAlias}}' can't be deleted as it used by the following widget(s):<br/>{{widgetsList}}",
665   - "is-gateway": "Is gateway",
666   - "public": "Public",
667   - "device-public": "Device is public",
668   - "select-device": "Select device"
669   - },
670   - "dialog": {
671   - "close": "Close dialog"
672   - },
673   - "error": {
674   - "unable-to-connect": "Unable to connect to the server! Please check your internet connection.",
675   - "unhandled-error-code": "Unhandled error code: {{errorCode}}",
676   - "unknown-error": "Unknown error"
677   - },
678   - "entity": {
679   - "entity": "Entity",
680   - "entities": "Entities",
681   - "aliases": "Entity aliases",
682   - "entity-alias": "Entity alias",
683   - "unable-delete-entity-alias-title": "Unable to delete entity alias",
684   - "unable-delete-entity-alias-text": "Entity alias '{{entityAlias}}' can't be deleted as it used by the following widget(s):<br/>{{widgetsList}}",
685   - "duplicate-alias-error": "Duplicate alias found '{{alias}}'.<br>Entity aliases must be unique whithin the dashboard.",
686   - "missing-entity-filter-error": "Filter is missing for alias '{{alias}}'.",
687   - "configure-alias": "Configure '{{alias}}' alias",
688   - "alias": "Alias",
689   - "alias-required": "Entity alias is required.",
690   - "remove-alias": "Remove entity alias",
691   - "add-alias": "Add entity alias",
692   - "entity-list": "Entity list",
693   - "entity-type": "Entity type",
694   - "entity-types": "Entity types",
695   - "entity-type-list": "Entity type list",
696   - "any-entity": "Any entity",
697   - "enter-entity-type": "Enter entity type",
698   - "no-entities-matching": "No entities matching '{{entity}}' were found.",
699   - "no-entity-types-matching": "No entity types matching '{{entityType}}' were found.",
700   - "name-starts-with": "Name starts with",
701   - "use-entity-name-filter": "Use filter",
702   - "entity-list-empty": "No entities selected.",
703   - "entity-type-list-empty": "No entity types selected.",
704   - "entity-name-filter-required": "Entity name filter is required.",
705   - "entity-name-filter-no-entity-matched": "No entities starting with '{{entity}}' were found.",
706   - "all-subtypes": "All",
707   - "select-entities": "Select entities",
708   - "no-aliases-found": "No aliases found.",
709   - "no-alias-matching": "'{{alias}}' not found.",
710   - "create-new-alias": "Create a new one!",
711   - "key": "Key",
712   - "key-name": "Key name",
713   - "no-keys-found": "No keys found.",
714   - "no-key-matching": "'{{key}}' not found.",
715   - "create-new-key": "Create a new one!",
716   - "type": "Type",
717   - "type-required": "Entity type is required.",
718   - "type-device": "Device",
719   - "type-devices": "Devices",
720   - "list-of-devices": "{ count, select, 1 {One device} other {List of # devices} }",
721   - "device-name-starts-with": "Devices whose names start with '{{prefix}}'",
722   - "type-asset": "Asset",
723   - "type-assets": "Assets",
724   - "list-of-assets": "{ count, select, 1 {One asset} other {List of # assets} }",
725   - "asset-name-starts-with": "Assets whose names start with '{{prefix}}'",
726   - "type-rule": "Rule",
727   - "type-rules": "Rules",
728   - "list-of-rules": "{ count, select, 1 {One rule} other {List of # rules} }",
729   - "rule-name-starts-with": "Rules whose names start with '{{prefix}}'",
730   - "type-plugin": "Plugin",
731   - "type-plugins": "Plugins",
732   - "list-of-plugins": "{ count, select, 1 {One plugin} other {List of # plugins} }",
733   - "plugin-name-starts-with": "Plugins whose names start with '{{prefix}}'",
734   - "type-tenant": "Tenant",
735   - "type-tenants": "Tenants",
736   - "list-of-tenants": "{ count, select, 1 {One tenant} other {List of # tenants} }",
737   - "tenant-name-starts-with": "Tenants whose names start with '{{prefix}}'",
738   - "type-customer": "Customer",
739   - "type-customers": "Customers",
740   - "list-of-customers": "{ count, select, 1 {One customer} other {List of # customers} }",
741   - "customer-name-starts-with": "Customers whose names start with '{{prefix}}'",
742   - "type-user": "User",
743   - "type-users": "Users",
744   - "list-of-users": "{ count, select, 1 {One user} other {List of # users} }",
745   - "user-name-starts-with": "Users whose names start with '{{prefix}}'",
746   - "type-dashboard": "Dashboard",
747   - "type-dashboards": "Dashboards",
748   - "list-of-dashboards": "{ count, select, 1 {One dashboard} other {List of # dashboards} }",
749   - "dashboard-name-starts-with": "Dashboards whose names start with '{{prefix}}'",
750   - "type-alarm": "Alarm",
751   - "type-alarms": "Alarms",
752   - "list-of-alarms": "{ count, select, 1 {One alarms} other {List of # alarms} }",
753   - "alarm-name-starts-with": "Alarms whose names start with '{{prefix}}'",
754   - "type-rulechain": "Rule chain",
755   - "type-rulechains": "Rule chains",
756   - "list-of-rulechains": "{ count, select, 1 {One rule chain} other {List of # rule chains} }",
757   - "rulechain-name-starts-with": "Rule chains whose names start with '{{prefix}}'",
758   - "type-rulenode": "Rule node",
759   - "type-rulenodes": "Rule nodes",
760   - "list-of-rulenodes": "{ count, select, 1 {One rule node} other {List of # rule nodes} }",
761   - "rulenode-name-starts-with": "Rule nodes whose names start with '{{prefix}}'",
762   - "type-current-customer": "Current Customer",
763   - "search": "Search entities",
764   - "selected-entities": "{ count, select, 1 {1 entity} other {# entities} } selected",
765   - "entity-name": "Entity name",
766   - "details": "Entity details",
767   - "no-entities-prompt": "No entities found",
768   - "no-data": "No data to display"
769   - },
770   - "event": {
771   - "event-type": "Event type",
772   - "type-error": "Error",
773   - "type-lc-event": "Lifecycle event",
774   - "type-stats": "Statistics",
775   - "type-debug-rule-node": "Debug",
776   - "type-debug-rule-chain": "Debug",
777   - "no-events-prompt": "No events found",
778   - "error": "Error",
779   - "alarm": "Alarm",
780   - "event-time": "Event time",
781   - "server": "Server",
782   - "body": "Body",
783   - "method": "Method",
784   - "type": "Type",
785   - "entity": "Entity",
786   - "message-id": "Message Id",
787   - "message-type": "Message Type",
788   - "data-type": "Data Type",
789   - "relation-type": "Relation Type",
790   - "metadata": "Metadata",
791   - "data": "Data",
792   - "event": "Event",
793   - "status": "Status",
794   - "success": "Success",
795   - "failed": "Failed",
796   - "messages-processed": "Messages processed",
797   - "errors-occurred": "Errors occurred"
798   - },
799   - "extension": {
800   - "extensions": "Extensions",
801   - "selected-extensions": "{ count, select, 1 {1 extension} other {# extensions} } selected",
802   - "type": "Type",
803   - "key": "Key",
804   - "value": "Value",
805   - "id": "Id",
806   - "extension-id": "Extension id",
807   - "extension-type": "Extension type",
808   - "transformer-json": "JSON *",
809   - "unique-id-required": "Current extension id already exists.",
810   - "delete": "Delete extension",
811   - "add": "Add extension",
812   - "edit": "Edit extension",
813   - "delete-extension-title": "Are you sure you want to delete the extension '{{extensionId}}'?",
814   - "delete-extension-text": "Be careful, after the confirmation the extension and all related data will become unrecoverable.",
815   - "delete-extensions-title": "Are you sure you want to delete { count, select, 1 {1 extension} other {# extensions} }?",
816   - "delete-extensions-text": "Be careful, after the confirmation all selected extensions will be removed.",
817   - "converters": "Converters",
818   - "converter-id": "Converter id",
819   - "configuration": "Configuration",
820   - "converter-configurations": "Converter configurations",
821   - "token": "Security token",
822   - "add-converter": "Add converter",
823   - "add-config": "Add converter configuration",
824   - "device-name-expression": "Device name expression",
825   - "device-type-expression": "Device type expression",
826   - "custom": "Custom",
827   - "to-double": "To Double",
828   - "transformer": "Transformer",
829   - "json-required": "Transformer json is required.",
830   - "json-parse": "Unable to parse transformer json.",
831   - "attributes": "Attributes",
832   - "add-attribute": "Add attribute",
833   - "add-map": "Add mapping element",
834   - "timeseries": "Timeseries",
835   - "add-timeseries": "Add timeseries",
836   - "field-required": "Field is required",
837   - "brokers": "Brokers",
838   - "add-broker": "Add broker",
839   - "host": "Host",
840   - "port": "Port",
841   - "port-range": "Port should be in a range from 1 to 65535.",
842   - "ssl": "Ssl",
843   - "credentials": "Credentials",
844   - "username": "Username",
845   - "password": "Password",
846   - "retry-interval": "Retry interval in milliseconds",
847   - "anonymous": "Anonymous",
848   - "basic": "Basic",
849   - "pem": "PEM",
850   - "ca-cert": "CA certificate file *",
851   - "private-key": "Private key file *",
852   - "cert": "Certificate file *",
853   - "no-file": "No file selected.",
854   - "drop-file": "Drop a file or click to select a file to upload.",
855   - "mapping": "Mapping",
856   - "topic-filter": "Topic filter",
857   - "converter-type": "Converter type",
858   - "converter-json": "Json",
859   - "json-name-expression": "Device name json expression",
860   - "topic-name-expression": "Device name topic expression",
861   - "json-type-expression": "Device type json expression",
862   - "topic-type-expression": "Device type topic expression",
863   - "attribute-key-expression": "Attribute key expression",
864   - "attr-json-key-expression": "Attribute key json expression",
865   - "attr-topic-key-expression": "Attribute key topic expression",
866   - "request-id-expression": "Request id expression",
867   - "request-id-json-expression": "Request id json expression",
868   - "request-id-topic-expression": "Request id topic expression",
869   - "response-topic-expression": "Response topic expression",
870   - "value-expression": "Value expression",
871   - "topic": "Topic",
872   - "timeout": "Timeout in milliseconds",
873   - "converter-json-required": "Converter json is required.",
874   - "converter-json-parse": "Unable to parse converter json.",
875   - "filter-expression": "Filter expression",
876   - "connect-requests": "Connect requests",
877   - "add-connect-request": "Add connect request",
878   - "disconnect-requests": "Disconnect requests",
879   - "add-disconnect-request": "Add disconnect request",
880   - "attribute-requests": "Attribute requests",
881   - "add-attribute-request": "Add attribute request",
882   - "attribute-updates": "Attribute updates",
883   - "add-attribute-update": "Add attribute update",
884   - "server-side-rpc": "Server side RPC",
885   - "add-server-side-rpc-request": "Add server-side RPC request",
886   - "device-name-filter": "Device name filter",
887   - "attribute-filter": "Attribute filter",
888   - "method-filter": "Method filter",
889   - "request-topic-expression": "Request topic expression",
890   - "response-timeout": "Response timeout in milliseconds",
891   - "topic-expression": "Topic expression",
892   - "client-scope": "Client scope",
893   - "add-device": "Add device",
894   - "opc-server": "Servers",
895   - "opc-add-server": "Add server",
896   - "opc-add-server-prompt": "Please add server",
897   - "opc-application-name": "Application name",
898   - "opc-application-uri": "Application uri",
899   - "opc-scan-period-in-seconds": "Scan period in seconds",
900   - "opc-security": "Security",
901   - "opc-identity": "Identity",
902   - "opc-keystore": "Keystore",
903   - "opc-type": "Type",
904   - "opc-keystore-type": "Type",
905   - "opc-keystore-location": "Location *",
906   - "opc-keystore-password": "Password",
907   - "opc-keystore-alias": "Alias",
908   - "opc-keystore-key-password": "Key password",
909   - "opc-device-node-pattern": "Device node pattern",
910   - "opc-device-name-pattern": "Device name pattern",
911   - "modbus-server": "Servers/slaves",
912   - "modbus-add-server": "Add server/slave",
913   - "modbus-add-server-prompt": "Please add server/slave",
914   - "modbus-transport": "Transport",
915   - "modbus-port-name": "Serial port name",
916   - "modbus-encoding": "Encoding",
917   - "modbus-parity": "Parity",
918   - "modbus-baudrate": "Baud rate",
919   - "modbus-databits": "Data bits",
920   - "modbus-stopbits": "Stop bits",
921   - "modbus-databits-range": "Data bits should be in a range from 7 to 8.",
922   - "modbus-stopbits-range": "Stop bits should be in a range from 1 to 2.",
923   - "modbus-unit-id": "Unit ID",
924   - "modbus-unit-id-range": "Unit ID should be in a range from 1 to 247.",
925   - "modbus-device-name": "Device name",
926   - "modbus-poll-period": "Poll period (ms)",
927   - "modbus-attributes-poll-period": "Attributes poll period (ms)",
928   - "modbus-timeseries-poll-period": "Timeseries poll period (ms)",
929   - "modbus-poll-period-range": "Poll period should be positive value.",
930   - "modbus-tag": "Tag",
931   - "modbus-function": "Function",
932   - "modbus-register-address": "Register address",
933   - "modbus-register-address-range": "Register address should be in a range from 0 to 65535.",
934   - "modbus-register-bit-index": "Bit index",
935   - "modbus-register-bit-index-range": "Bit index should be in a range from 0 to 15.",
936   - "modbus-register-count": "Register count",
937   - "modbus-register-count-range": "Register count should be a positive value.",
938   - "modbus-byte-order": "Byte order",
  918 + "sync": {
  919 + "status": "Status",
  920 + "sync": "Sync",
  921 + "not-sync": "Not sync",
  922 + "last-sync-time": "Last sync time",
  923 + "not-available": "Not available"
  924 + },
939 925
940   - "sync": {
941   - "status": "Status",
942   - "sync": "Sync",
943   - "not-sync": "Not sync",
944   - "last-sync-time": "Last sync time",
945   - "not-available": "Not available"
946   - },
947   -
948   - "export-extensions-configuration": "Export extensions configuration",
949   - "import-extensions-configuration": "Import extensions configuration",
950   - "import-extensions": "Import extensions",
951   - "import-extension": "Import extension",
952   - "export-extension": "Export extension",
953   - "file": "Extensions file",
954   - "invalid-file-error": "Invalid extension file"
955   - },
956   - "fullscreen": {
957   - "expand": "Expand to fullscreen",
958   - "exit": "Exit fullscreen",
959   - "toggle": "Toggle fullscreen mode",
960   - "fullscreen": "Fullscreen"
961   - },
962   - "function": {
963   - "function": "Function"
964   - },
965   - "grid": {
966   - "delete-item-title": "Are you sure you want to delete this item?",
967   - "delete-item-text": "Be careful, after the confirmation this item and all related data will become unrecoverable.",
968   - "delete-items-title": "Are you sure you want to delete { count, select, 1 {1 item} other {# items} }?",
969   - "delete-items-action-title": "Delete { count, select, 1 {1 item} other {# items} }",
970   - "delete-items-text": "Be careful, after the confirmation all selected items will be removed and all related data will become unrecoverable.",
971   - "add-item-text": "Add new item",
972   - "no-items-text": "No items found",
973   - "item-details": "Item details",
974   - "delete-item": "Delete Item",
975   - "delete-items": "Delete Items",
976   - "scroll-to-top": "Scroll to top"
977   - },
978   - "help": {
979   - "goto-help-page": "Go to help page"
980   - },
981   - "home": {
982   - "home": "Home",
983   - "profile": "Profile",
984   - "logout": "Logout",
985   - "menu": "Menu",
986   - "avatar": "Avatar",
987   - "open-user-menu": "Open user menu"
988   - },
989   - "import": {
990   - "no-file": "No file selected",
991   - "drop-file": "Drop a JSON file or click to select a file to upload."
992   - },
993   - "item": {
994   - "selected": "Selected"
995   - },
996   - "js-func": {
997   - "no-return-error": "Function must return value!",
998   - "return-type-mismatch": "Function must return value of '{{type}}' type!",
999   - "tidy": "Tidy"
1000   - },
1001   - "key-val": {
1002   - "key": "Key",
1003   - "value": "Value",
1004   - "remove-entry": "Remove entry",
1005   - "add-entry": "Add entry",
1006   - "no-data": "No entries"
1007   - },
1008   - "layout": {
1009   - "layout": "Layout",
1010   - "manage": "Manage layouts",
1011   - "settings": "Layout settings",
1012   - "color": "Color",
1013   - "main": "Main",
1014   - "right": "Right",
1015   - "select": "Select target layout"
1016   - },
1017   - "legend": {
1018   - "position": "Legend position",
1019   - "show-max": "Show max value",
1020   - "show-min": "Show min value",
1021   - "show-avg": "Show average value",
1022   - "show-total": "Show total value",
1023   - "settings": "Legend settings",
1024   - "min": "min",
1025   - "max": "max",
1026   - "avg": "avg",
1027   - "total": "total"
1028   - },
1029   - "login": {
1030   - "login": "Login",
1031   - "request-password-reset": "Request Password Reset",
1032   - "reset-password": "Reset Password",
1033   - "create-password": "Create Password",
1034   - "passwords-mismatch-error": "Entered passwords must be same!",
1035   - "password-again": "Password again",
1036   - "sign-in": "Please sign in",
1037   - "username": "Username (email)",
1038   - "remember-me": "Remember me",
1039   - "forgot-password": "Forgot Password?",
1040   - "password-reset": "Password reset",
1041   - "new-password": "New password",
1042   - "new-password-again": "New password again",
1043   - "password-link-sent-message": "Password reset link was successfully sent!",
1044   - "email": "Email"
1045   - },
1046   - "position": {
1047   - "top": "Top",
1048   - "bottom": "Bottom",
1049   - "left": "Left",
1050   - "right": "Right"
1051   - },
1052   - "profile": {
1053   - "profile": "Profile",
1054   - "change-password": "Change Password",
1055   - "current-password": "Current password"
1056   - },
1057   - "relation": {
1058   - "relations": "Relations",
1059   - "direction": "Direction",
1060   - "search-direction": {
1061   - "FROM": "From",
1062   - "TO": "To"
1063   - },
1064   - "direction-type": {
1065   - "FROM": "from",
1066   - "TO": "to"
1067   - },
1068   - "from-relations": "Outbound relations",
1069   - "to-relations": "Inbound relations",
1070   - "selected-relations": "{ count, select, 1 {1 relation} other {# relations} } selected",
1071   - "type": "Type",
1072   - "to-entity-type": "To entity type",
1073   - "to-entity-name": "To entity name",
1074   - "from-entity-type": "From entity type",
1075   - "from-entity-name": "From entity name",
1076   - "to-entity": "To entity",
1077   - "from-entity": "From entity",
1078   - "delete": "Delete relation",
1079   - "relation-type": "Relation type",
1080   - "relation-type-required": "Relation type is required.",
1081   - "any-relation-type": "Any type",
1082   - "add": "Add relation",
1083   - "edit": "Edit relation",
1084   - "delete-to-relation-title": "Are you sure you want to delete relation to the entity '{{entityName}}'?",
1085   - "delete-to-relation-text": "Be careful, after the confirmation the entity '{{entityName}}' will be unrelated from the current entity.",
1086   - "delete-to-relations-title": "Are you sure you want to delete { count, select, 1 {1 relation} other {# relations} }?",
1087   - "delete-to-relations-text": "Be careful, after the confirmation all selected relations will be removed and corresponding entities will be unrelated from the current entity.",
1088   - "delete-from-relation-title": "Are you sure you want to delete relation from the entity '{{entityName}}'?",
1089   - "delete-from-relation-text": "Be careful, after the confirmation current entity will be unrelated from the entity '{{entityName}}'.",
1090   - "delete-from-relations-title": "Are you sure you want to delete { count, select, 1 {1 relation} other {# relations} }?",
1091   - "delete-from-relations-text": "Be careful, after the confirmation all selected relations will be removed and current entity will be unrelated from the corresponding entities.",
1092   - "remove-relation-filter": "Remove relation filter",
1093   - "add-relation-filter": "Add relation filter",
1094   - "any-relation": "Any relation",
1095   - "relation-filters": "Relation filters",
1096   - "additional-info": "Additional info (JSON)",
1097   - "invalid-additional-info": "Unable to parse additional info json."
1098   - },
1099   - "rulechain": {
1100   - "rulechain": "Rule chain",
1101   - "rulechains": "Rule chains",
1102   - "root": "Root",
1103   - "delete": "Delete rule chain",
1104   - "name": "Name",
1105   - "name-required": "Name is required.",
1106   - "description": "Description",
1107   - "add": "Add Rule Chain",
1108   - "set-root": "Make rule chain root",
1109   - "set-root-rulechain-title": "Are you sure you want to make the rule chain '{{ruleChainName}}' root?",
1110   - "set-root-rulechain-text": "After the confirmation the rule chain will become root and will handle all incoming transport messages.",
1111   - "delete-rulechain-title": "Are you sure you want to delete the rule chain '{{ruleChainName}}'?",
1112   - "delete-rulechain-text": "Be careful, after the confirmation the rule chain and all related data will become unrecoverable.",
1113   - "delete-rulechains-title": "Are you sure you want to delete { count, select, 1 {1 rule chain} other {# rule chains} }?",
1114   - "delete-rulechains-action-title": "Delete { count, select, 1 {1 rule chain} other {# rule chains} }",
1115   - "delete-rulechains-text": "Be careful, after the confirmation all selected rule chains will be removed and all related data will become unrecoverable.",
1116   - "add-rulechain-text": "Add new rule chain",
1117   - "no-rulechains-text": "No rule chains found",
1118   - "rulechain-details": "Rule chain details",
1119   - "details": "Details",
1120   - "events": "Events",
1121   - "system": "System",
1122   - "import": "Import rule chain",
1123   - "export": "Export rule chain",
1124   - "export-failed-error": "Unable to export rule chain: {{error}}",
1125   - "create-new-rulechain": "Create new rule chain",
1126   - "rulechain-file": "Rule chain file",
1127   - "invalid-rulechain-file-error": "Unable to import rule chain: Invalid rule chain data structure.",
1128   - "copyId": "Copy rule chain Id",
1129   - "idCopiedMessage": "Rule chain Id has been copied to clipboard",
1130   - "select-rulechain": "Select rule chain",
1131   - "no-rulechains-matching": "No rule chains matching '{{entity}}' were found.",
1132   - "rulechain-required": "Rule chain is required",
1133   - "management": "Rules management",
1134   - "debug-mode": "Debug mode"
1135   - },
1136   - "rulenode": {
1137   - "details": "Details",
1138   - "events": "Events",
1139   - "search": "Search nodes",
1140   - "open-node-library": "Open node library",
1141   - "add": "Add rule node",
1142   - "name": "Name",
1143   - "name-required": "Name is required.",
1144   - "type": "Type",
1145   - "description": "Description",
1146   - "delete": "Delete rule node",
1147   - "select-all-objects": "Select all nodes and connections",
1148   - "deselect-all-objects": "Deselect all nodes and connections",
1149   - "delete-selected-objects": "Delete selected nodes and connections",
1150   - "delete-selected": "Delete selected",
1151   - "select-all": "Select all",
1152   - "copy-selected": "Copy selected",
1153   - "deselect-all": "Deselect all",
1154   - "rulenode-details": "Rule node details",
1155   - "debug-mode": "Debug mode",
1156   - "configuration": "Configuration",
1157   - "link": "Link",
1158   - "link-details": "Rule node link details",
1159   - "add-link": "Add link",
1160   - "link-label": "Link label",
1161   - "link-label-required": "Link label is required.",
1162   - "custom-link-label": "Custom link label",
1163   - "custom-link-label-required": "Custom link label is required.",
1164   - "link-labels": "Link labels",
1165   - "link-labels-required": "Link labels is required.",
1166   - "no-link-labels-found": "No link labels found",
1167   - "no-link-label-matching": "'{{label}}' not found.",
1168   - "create-new-link-label": "Create a new one!",
1169   - "type-filter": "Filter",
1170   - "type-filter-details": "Filter incoming messages with configured conditions",
1171   - "type-enrichment": "Enrichment",
1172   - "type-enrichment-details": "Add additional information into Message Metadata",
1173   - "type-transformation": "Transformation",
1174   - "type-transformation-details": "Change Message payload and Metadata",
1175   - "type-action": "Action",
1176   - "type-action-details": "Perform special action",
1177   - "type-external": "External",
1178   - "type-external-details": "Interacts with external system",
1179   - "type-rule-chain": "Rule Chain",
1180   - "type-rule-chain-details": "Forwards incoming messages to specified Rule Chain",
1181   - "type-input": "Input",
1182   - "type-input-details": "Logical input of Rule Chain, forwards incoming messages to next related Rule Node",
1183   - "type-unknown": "Unknown",
1184   - "type-unknown-details": "Unresolved Rule Node",
1185   - "directive-is-not-loaded": "Defined configuration directive '{{directiveName}}' is not available.",
1186   - "ui-resources-load-error": "Failed to load configuration ui resources.",
1187   - "invalid-target-rulechain": "Unable to resolve target rule chain!",
1188   - "test-script-function": "Test script function",
1189   - "message": "Message",
1190   - "message-type": "Message type",
1191   - "select-message-type": "Select message type",
1192   - "message-type-required": "Message type is required",
1193   - "metadata": "Metadata",
1194   - "metadata-required": "Metadata entries can't be empty.",
1195   - "output": "Output",
1196   - "test": "Test",
1197   - "help": "Help"
1198   - },
1199   - "tenant": {
1200   - "tenant": "Tenant",
1201   - "tenants": "Tenants",
1202   - "management": "Tenant management",
1203   - "add": "Add Tenant",
1204   - "admins": "Admins",
1205   - "manage-tenant-admins": "Manage tenant admins",
1206   - "delete": "Delete tenant",
1207   - "add-tenant-text": "Add new tenant",
1208   - "no-tenants-text": "No tenants found",
1209   - "tenant-details": "Tenant details",
1210   - "delete-tenant-title": "Are you sure you want to delete the tenant '{{tenantTitle}}'?",
1211   - "delete-tenant-text": "Be careful, after the confirmation the tenant and all related data will become unrecoverable.",
1212   - "delete-tenants-title": "Are you sure you want to delete { count, select, 1 {1 tenant} other {# tenants} }?",
1213   - "delete-tenants-action-title": "Delete { count, select, 1 {1 tenant} other {# tenants} }",
1214   - "delete-tenants-text": "Be careful, after the confirmation all selected tenants will be removed and all related data will become unrecoverable.",
1215   - "title": "Title",
1216   - "title-required": "Title is required.",
1217   - "description": "Description",
1218   - "details": "Details",
1219   - "events": "Events",
1220   - "copyId": "Copy tenant Id",
1221   - "idCopiedMessage": "Tenant Id has been copied to clipboard",
1222   - "select-tenant": "Select tenant",
1223   - "no-tenants-matching": "No tenants matching '{{entity}}' were found.",
1224   - "tenant-required": "Tenant is required"
1225   - },
1226   - "timeinterval": {
1227   - "seconds-interval": "{ seconds, select, 1 {1 second} other {# seconds} }",
1228   - "minutes-interval": "{ minutes, select, 1 {1 minute} other {# minutes} }",
1229   - "hours-interval": "{ hours, select, 1 {1 hour} other {# hours} }",
1230   - "days-interval": "{ days, select, 1 {1 day} other {# days} }",
1231   - "days": "Days",
1232   - "hours": "Hours",
1233   - "minutes": "Minutes",
1234   - "seconds": "Seconds",
1235   - "advanced": "Advanced"
1236   - },
1237   - "timewindow": {
1238   - "days": "{ days, select, 1 { day } other {# days } }",
1239   - "hours": "{ hours, select, 0 { hour } 1 {1 hour } other {# hours } }",
1240   - "minutes": "{ minutes, select, 0 { minute } 1 {1 minute } other {# minutes } }",
1241   - "seconds": "{ seconds, select, 0 { second } 1 {1 second } other {# seconds } }",
1242   - "realtime": "Realtime",
1243   - "history": "History",
1244   - "last-prefix": "last",
1245   - "period": "from {{ startTime }} to {{ endTime }}",
1246   - "edit": "Edit timewindow",
1247   - "date-range": "Date range",
1248   - "last": "Last",
1249   - "time-period": "Time period"
1250   - },
1251   - "user": {
1252   - "user": "User",
1253   - "users": "Users",
1254   - "customer-users": "Customer Users",
1255   - "tenant-admins": "Tenant Admins",
1256   - "sys-admin": "System administrator",
1257   - "tenant-admin": "Tenant administrator",
1258   - "customer": "Customer",
1259   - "anonymous": "Anonymous",
1260   - "add": "Add User",
1261   - "delete": "Delete user",
1262   - "add-user-text": "Add new user",
1263   - "no-users-text": "No users found",
1264   - "user-details": "User details",
1265   - "delete-user-title": "Are you sure you want to delete the user '{{userEmail}}'?",
1266   - "delete-user-text": "Be careful, after the confirmation the user and all related data will become unrecoverable.",
1267   - "delete-users-title": "Are you sure you want to delete { count, select, 1 {1 user} other {# users} }?",
1268   - "delete-users-action-title": "Delete { count, select, 1 {1 user} other {# users} }",
1269   - "delete-users-text": "Be careful, after the confirmation all selected users will be removed and all related data will become unrecoverable.",
1270   - "activation-email-sent-message": "Activation email was successfully sent!",
1271   - "resend-activation": "Resend activation",
1272   - "email": "Email",
1273   - "email-required": "Email is required.",
1274   - "invalid-email-format": "Invalid email format.",
1275   - "first-name": "First Name",
1276   - "last-name": "Last Name",
1277   - "description": "Description",
1278   - "default-dashboard": "Default dashboard",
1279   - "always-fullscreen": "Always fullscreen",
1280   - "select-user": "Select user",
1281   - "no-users-matching": "No users matching '{{entity}}' were found.",
1282   - "user-required": "User is required",
1283   - "activation-method": "Activation method",
1284   - "display-activation-link": "Display activation link",
1285   - "send-activation-mail": "Send activation mail",
1286   - "activation-link": "User activation link",
1287   - "activation-link-text": "In order to activate user use the following <a href='{{activationLink}}' target='_blank'>activation link</a> :",
1288   - "copy-activation-link": "Copy activation link",
1289   - "activation-link-copied-message": "User activation link has been copied to clipboard",
1290   - "details": "Details"
1291   - },
1292   - "value": {
1293   - "type": "Value type",
1294   - "string": "String",
1295   - "string-value": "String value",
1296   - "integer": "Integer",
1297   - "integer-value": "Integer value",
1298   - "invalid-integer-value": "Invalid integer value",
1299   - "double": "Double",
1300   - "double-value": "Double value",
1301   - "boolean": "Boolean",
1302   - "boolean-value": "Boolean value",
1303   - "false": "False",
1304   - "true": "True",
1305   - "long": "Long"
1306   - },
1307   - "widget": {
1308   - "widget-library": "Widgets Library",
1309   - "widget-bundle": "Widgets Bundle",
1310   - "select-widgets-bundle": "Select widgets bundle",
1311   - "management": "Widget management",
1312   - "editor": "Widget Editor",
1313   - "widget-type-not-found": "Problem loading widget configuration.<br>Probably associated\n widget type was removed.",
1314   - "widget-type-load-error": "Widget wasn't loaded due to the following errors:",
1315   - "remove": "Remove widget",
1316   - "edit": "Edit widget",
1317   - "remove-widget-title": "Are you sure you want to remove the widget '{{widgetTitle}}'?",
1318   - "remove-widget-text": "After the confirmation the widget and all related data will become unrecoverable.",
1319   - "timeseries": "Time series",
1320   - "search-data": "Search data",
1321   - "no-data-found": "No data found",
1322   - "latest-values": "Latest values",
1323   - "rpc": "Control widget",
1324   - "alarm": "Alarm widget",
1325   - "static": "Static widget",
1326   - "select-widget-type": "Select widget type",
1327   - "missing-widget-title-error": "Widget title must be specified!",
1328   - "widget-saved": "Widget saved",
1329   - "unable-to-save-widget-error": "Unable to save widget! Widget has errors!",
1330   - "save": "Save widget",
1331   - "saveAs": "Save widget as",
1332   - "save-widget-type-as": "Save widget type as",
1333   - "save-widget-type-as-text": "Please enter new widget title and/or select target widgets bundle",
1334   - "toggle-fullscreen": "Toggle fullscreen",
1335   - "run": "Run widget",
1336   - "title": "Widget title",
1337   - "title-required": "Widget title is required.",
1338   - "type": "Widget type",
1339   - "resources": "Resources",
1340   - "resource-url": "JavaScript/CSS URL",
1341   - "remove-resource": "Remove resource",
1342   - "add-resource": "Add resource",
1343   - "html": "HTML",
1344   - "tidy": "Tidy",
1345   - "css": "CSS",
1346   - "settings-schema": "Settings schema",
1347   - "datakey-settings-schema": "Data key settings schema",
1348   - "javascript": "Javascript",
1349   - "remove-widget-type-title": "Are you sure you want to remove the widget type '{{widgetName}}'?",
1350   - "remove-widget-type-text": "After the confirmation the widget type and all related data will become unrecoverable.",
1351   - "remove-widget-type": "Remove widget type",
1352   - "add-widget-type": "Add new widget type",
1353   - "widget-type-load-failed-error": "Failed to load widget type!",
1354   - "widget-template-load-failed-error": "Failed to load widget template!",
1355   - "add": "Add Widget",
1356   - "undo": "Undo widget changes",
1357   - "export": "Export widget"
1358   - },
1359   - "widget-action": {
1360   - "header-button": "Widget header button",
1361   - "open-dashboard-state": "Navigate to new dashboard state",
1362   - "update-dashboard-state": "Update current dashboard state",
1363   - "open-dashboard": "Navigate to other dashboard",
1364   - "custom": "Custom action",
1365   - "target-dashboard-state": "Target dashboard state",
1366   - "target-dashboard-state-required": "Target dashboard state is required",
1367   - "set-entity-from-widget": "Set entity from widget",
1368   - "target-dashboard": "Target dashboard",
1369   - "open-right-layout": "Open right dashboard layout (mobile view)"
1370   - },
1371   - "widgets-bundle": {
1372   - "current": "Current bundle",
1373   - "widgets-bundles": "Widgets Bundles",
1374   - "add": "Add Widgets Bundle",
1375   - "delete": "Delete widgets bundle",
1376   - "title": "Title",
1377   - "title-required": "Title is required.",
1378   - "add-widgets-bundle-text": "Add new widgets bundle",
1379   - "no-widgets-bundles-text": "No widgets bundles found",
1380   - "empty": "Widgets bundle is empty",
1381   - "details": "Details",
1382   - "widgets-bundle-details": "Widgets bundle details",
1383   - "delete-widgets-bundle-title": "Are you sure you want to delete the widgets bundle '{{widgetsBundleTitle}}'?",
1384   - "delete-widgets-bundle-text": "Be careful, after the confirmation the widgets bundle and all related data will become unrecoverable.",
1385   - "delete-widgets-bundles-title": "Are you sure you want to delete { count, select, 1 {1 widgets bundle} other {# widgets bundles} }?",
1386   - "delete-widgets-bundles-action-title": "Delete { count, select, 1 {1 widgets bundle} other {# widgets bundles} }",
1387   - "delete-widgets-bundles-text": "Be careful, after the confirmation all selected widgets bundles will be removed and all related data will become unrecoverable.",
1388   - "no-widgets-bundles-matching": "No widgets bundles matching '{{widgetsBundle}}' were found.",
1389   - "widgets-bundle-required": "Widgets bundle is required.",
1390   - "system": "System",
1391   - "import": "Import widgets bundle",
1392   - "export": "Export widgets bundle",
1393   - "export-failed-error": "Unable to export widgets bundle: {{error}}",
1394   - "create-new-widgets-bundle": "Create new widgets bundle",
1395   - "widgets-bundle-file": "Widgets bundle file",
1396   - "invalid-widgets-bundle-file-error": "Unable to import widgets bundle: Invalid widgets bundle data structure."
1397   - },
1398   - "widget-config": {
1399   - "data": "Data",
1400   - "settings": "Settings",
1401   - "advanced": "Advanced",
1402   - "title": "Title",
1403   - "general-settings": "General settings",
1404   - "display-title": "Display title",
1405   - "drop-shadow": "Drop shadow",
1406   - "enable-fullscreen": "Enable fullscreen",
1407   - "background-color": "Background color",
1408   - "text-color": "Text color",
1409   - "padding": "Padding",
1410   - "margin": "Margin",
1411   - "widget-style": "Widget style",
1412   - "title-style": "Title style",
1413   - "mobile-mode-settings": "Mobile mode settings",
1414   - "order": "Order",
1415   - "height": "Height",
1416   - "units": "Special symbol to show next to value",
1417   - "decimals": "Number of digits after floating point",
1418   - "timewindow": "Timewindow",
1419   - "use-dashboard-timewindow": "Use dashboard timewindow",
1420   - "display-legend": "Display legend",
1421   - "datasources": "Datasources",
1422   - "maximum-datasources": "Maximum { count, select, 1 {1 datasource is allowed.} other {# datasources are allowed} }",
1423   - "datasource-type": "Type",
1424   - "datasource-parameters": "Parameters",
1425   - "remove-datasource": "Remove datasource",
1426   - "add-datasource": "Add datasource",
1427   - "target-device": "Target device",
1428   - "alarm-source": "Alarm source",
1429   - "actions": "Actions",
1430   - "action": "Action",
1431   - "add-action": "Add action",
1432   - "search-actions": "Search actions",
1433   - "action-source": "Action source",
1434   - "action-source-required": "Action source is required.",
1435   - "action-name": "Name",
1436   - "action-name-required": "Action name is required.",
1437   - "action-name-not-unique": "Another action with the same name already exists.<br/>Action name should be unique within the same action source.",
1438   - "action-icon": "Icon",
1439   - "action-type": "Type",
1440   - "action-type-required": "Action type is required.",
1441   - "edit-action": "Edit action",
1442   - "delete-action": "Delete action",
1443   - "delete-action-title": "Delete widget action",
1444   - "delete-action-text": "Are you sure you want delete widget action with name '{{actionName}}'?"
1445   - },
1446   - "widget-type": {
1447   - "import": "Import widget type",
1448   - "export": "Export widget type",
1449   - "export-failed-error": "Unable to export widget type: {{error}}",
1450   - "create-new-widget-type": "Create new widget type",
1451   - "widget-type-file": "Widget type file",
1452   - "invalid-widget-type-file-error": "Unable to import widget type: Invalid widget type data structure."
1453   - },
1454   - "icon": {
1455   - "icon": "Icon",
1456   - "select-icon": "Select icon",
1457   - "material-icons": "Material icons",
1458   - "show-all": "Show all icons"
1459   - },
1460   - "custom": {
1461   - "widget-action": {
1462   - "action-cell-button": "Action cell button",
1463   - "row-click": "On row click",
1464   - "marker-click": "On marker click",
1465   - "tooltip-tag-action": "Tooltip tag action"
1466   - }
1467   - },
1468   - "language": {
1469   - "language": "Language",
1470   - "en_US": "English",
1471   - "ko_KR": "Korean",
1472   - "zh_CN": "Chinese",
1473   - "ru_RU": "Russian",
1474   - "es_ES": "Spanish"
1475   - }
1476   - }
  926 + "export-extensions-configuration": "Export extensions configuration",
  927 + "import-extensions-configuration": "Import extensions configuration",
  928 + "import-extensions": "Import extensions",
  929 + "import-extension": "Import extension",
  930 + "export-extension": "Export extension",
  931 + "file": "Extensions file",
  932 + "invalid-file-error": "Invalid extension file"
  933 + },
  934 + "fullscreen": {
  935 + "expand": "Expand to fullscreen",
  936 + "exit": "Exit fullscreen",
  937 + "toggle": "Toggle fullscreen mode",
  938 + "fullscreen": "Fullscreen"
  939 + },
  940 + "function": {
  941 + "function": "Function"
  942 + },
  943 + "grid": {
  944 + "delete-item-title": "Are you sure you want to delete this item?",
  945 + "delete-item-text": "Be careful, after the confirmation this item and all related data will become unrecoverable.",
  946 + "delete-items-title": "Are you sure you want to delete { count, select, 1 {1 item} other {# items} }?",
  947 + "delete-items-action-title": "Delete { count, select, 1 {1 item} other {# items} }",
  948 + "delete-items-text": "Be careful, after the confirmation all selected items will be removed and all related data will become unrecoverable.",
  949 + "add-item-text": "Add new item",
  950 + "no-items-text": "No items found",
  951 + "item-details": "Item details",
  952 + "delete-item": "Delete Item",
  953 + "delete-items": "Delete Items",
  954 + "scroll-to-top": "Scroll to top"
  955 + },
  956 + "help": {
  957 + "goto-help-page": "Go to help page"
  958 + },
  959 + "home": {
  960 + "home": "Home",
  961 + "profile": "Profile",
  962 + "logout": "Logout",
  963 + "menu": "Menu",
  964 + "avatar": "Avatar",
  965 + "open-user-menu": "Open user menu"
  966 + },
  967 + "import": {
  968 + "no-file": "No file selected",
  969 + "drop-file": "Drop a JSON file or click to select a file to upload."
  970 + },
  971 + "item": {
  972 + "selected": "Selected"
  973 + },
  974 + "js-func": {
  975 + "no-return-error": "Function must return value!",
  976 + "return-type-mismatch": "Function must return value of '{{type}}' type!",
  977 + "tidy": "Tidy"
  978 + },
  979 + "key-val": {
  980 + "key": "Key",
  981 + "value": "Value",
  982 + "remove-entry": "Remove entry",
  983 + "add-entry": "Add entry",
  984 + "no-data": "No entries"
  985 + },
  986 + "layout": {
  987 + "layout": "Layout",
  988 + "manage": "Manage layouts",
  989 + "settings": "Layout settings",
  990 + "color": "Color",
  991 + "main": "Main",
  992 + "right": "Right",
  993 + "select": "Select target layout"
  994 + },
  995 + "legend": {
  996 + "position": "Legend position",
  997 + "show-max": "Show max value",
  998 + "show-min": "Show min value",
  999 + "show-avg": "Show average value",
  1000 + "show-total": "Show total value",
  1001 + "settings": "Legend settings",
  1002 + "min": "min",
  1003 + "max": "max",
  1004 + "avg": "avg",
  1005 + "total": "total"
  1006 + },
  1007 + "login": {
  1008 + "login": "Login",
  1009 + "request-password-reset": "Request Password Reset",
  1010 + "reset-password": "Reset Password",
  1011 + "create-password": "Create Password",
  1012 + "passwords-mismatch-error": "Entered passwords must be same!",
  1013 + "password-again": "Password again",
  1014 + "sign-in": "Please sign in",
  1015 + "username": "Username (email)",
  1016 + "remember-me": "Remember me",
  1017 + "forgot-password": "Forgot Password?",
  1018 + "password-reset": "Password reset",
  1019 + "new-password": "New password",
  1020 + "new-password-again": "New password again",
  1021 + "password-link-sent-message": "Password reset link was successfully sent!",
  1022 + "email": "Email"
  1023 + },
  1024 + "position": {
  1025 + "top": "Top",
  1026 + "bottom": "Bottom",
  1027 + "left": "Left",
  1028 + "right": "Right"
  1029 + },
  1030 + "profile": {
  1031 + "profile": "Profile",
  1032 + "change-password": "Change Password",
  1033 + "current-password": "Current password"
  1034 + },
  1035 + "relation": {
  1036 + "relations": "Relations",
  1037 + "direction": "Direction",
  1038 + "search-direction": {
  1039 + "FROM": "From",
  1040 + "TO": "To"
  1041 + },
  1042 + "direction-type": {
  1043 + "FROM": "from",
  1044 + "TO": "to"
  1045 + },
  1046 + "from-relations": "Outbound relations",
  1047 + "to-relations": "Inbound relations",
  1048 + "selected-relations": "{ count, select, 1 {1 relation} other {# relations} } selected",
  1049 + "type": "Type",
  1050 + "to-entity-type": "To entity type",
  1051 + "to-entity-name": "To entity name",
  1052 + "from-entity-type": "From entity type",
  1053 + "from-entity-name": "From entity name",
  1054 + "to-entity": "To entity",
  1055 + "from-entity": "From entity",
  1056 + "delete": "Delete relation",
  1057 + "relation-type": "Relation type",
  1058 + "relation-type-required": "Relation type is required.",
  1059 + "any-relation-type": "Any type",
  1060 + "add": "Add relation",
  1061 + "edit": "Edit relation",
  1062 + "delete-to-relation-title": "Are you sure you want to delete relation to the entity '{{entityName}}'?",
  1063 + "delete-to-relation-text": "Be careful, after the confirmation the entity '{{entityName}}' will be unrelated from the current entity.",
  1064 + "delete-to-relations-title": "Are you sure you want to delete { count, select, 1 {1 relation} other {# relations} }?",
  1065 + "delete-to-relations-text": "Be careful, after the confirmation all selected relations will be removed and corresponding entities will be unrelated from the current entity.",
  1066 + "delete-from-relation-title": "Are you sure you want to delete relation from the entity '{{entityName}}'?",
  1067 + "delete-from-relation-text": "Be careful, after the confirmation current entity will be unrelated from the entity '{{entityName}}'.",
  1068 + "delete-from-relations-title": "Are you sure you want to delete { count, select, 1 {1 relation} other {# relations} }?",
  1069 + "delete-from-relations-text": "Be careful, after the confirmation all selected relations will be removed and current entity will be unrelated from the corresponding entities.",
  1070 + "remove-relation-filter": "Remove relation filter",
  1071 + "add-relation-filter": "Add relation filter",
  1072 + "any-relation": "Any relation",
  1073 + "relation-filters": "Relation filters",
  1074 + "additional-info": "Additional info (JSON)",
  1075 + "invalid-additional-info": "Unable to parse additional info json."
  1076 + },
  1077 + "rulechain": {
  1078 + "rulechain": "Rule chain",
  1079 + "rulechains": "Rule chains",
  1080 + "root": "Root",
  1081 + "delete": "Delete rule chain",
  1082 + "name": "Name",
  1083 + "name-required": "Name is required.",
  1084 + "description": "Description",
  1085 + "add": "Add Rule Chain",
  1086 + "set-root": "Make rule chain root",
  1087 + "set-root-rulechain-title": "Are you sure you want to make the rule chain '{{ruleChainName}}' root?",
  1088 + "set-root-rulechain-text": "After the confirmation the rule chain will become root and will handle all incoming transport messages.",
  1089 + "delete-rulechain-title": "Are you sure you want to delete the rule chain '{{ruleChainName}}'?",
  1090 + "delete-rulechain-text": "Be careful, after the confirmation the rule chain and all related data will become unrecoverable.",
  1091 + "delete-rulechains-title": "Are you sure you want to delete { count, select, 1 {1 rule chain} other {# rule chains} }?",
  1092 + "delete-rulechains-action-title": "Delete { count, select, 1 {1 rule chain} other {# rule chains} }",
  1093 + "delete-rulechains-text": "Be careful, after the confirmation all selected rule chains will be removed and all related data will become unrecoverable.",
  1094 + "add-rulechain-text": "Add new rule chain",
  1095 + "no-rulechains-text": "No rule chains found",
  1096 + "rulechain-details": "Rule chain details",
  1097 + "details": "Details",
  1098 + "events": "Events",
  1099 + "system": "System",
  1100 + "import": "Import rule chain",
  1101 + "export": "Export rule chain",
  1102 + "export-failed-error": "Unable to export rule chain: {{error}}",
  1103 + "create-new-rulechain": "Create new rule chain",
  1104 + "rulechain-file": "Rule chain file",
  1105 + "invalid-rulechain-file-error": "Unable to import rule chain: Invalid rule chain data structure.",
  1106 + "copyId": "Copy rule chain Id",
  1107 + "idCopiedMessage": "Rule chain Id has been copied to clipboard",
  1108 + "select-rulechain": "Select rule chain",
  1109 + "no-rulechains-matching": "No rule chains matching '{{entity}}' were found.",
  1110 + "rulechain-required": "Rule chain is required",
  1111 + "management": "Rules management",
  1112 + "debug-mode": "Debug mode"
  1113 + },
  1114 + "rulenode": {
  1115 + "details": "Details",
  1116 + "events": "Events",
  1117 + "search": "Search nodes",
  1118 + "open-node-library": "Open node library",
  1119 + "add": "Add rule node",
  1120 + "name": "Name",
  1121 + "name-required": "Name is required.",
  1122 + "type": "Type",
  1123 + "description": "Description",
  1124 + "delete": "Delete rule node",
  1125 + "select-all-objects": "Select all nodes and connections",
  1126 + "deselect-all-objects": "Deselect all nodes and connections",
  1127 + "delete-selected-objects": "Delete selected nodes and connections",
  1128 + "delete-selected": "Delete selected",
  1129 + "select-all": "Select all",
  1130 + "copy-selected": "Copy selected",
  1131 + "deselect-all": "Deselect all",
  1132 + "rulenode-details": "Rule node details",
  1133 + "debug-mode": "Debug mode",
  1134 + "configuration": "Configuration",
  1135 + "link": "Link",
  1136 + "link-details": "Rule node link details",
  1137 + "add-link": "Add link",
  1138 + "link-label": "Link label",
  1139 + "link-label-required": "Link label is required.",
  1140 + "custom-link-label": "Custom link label",
  1141 + "custom-link-label-required": "Custom link label is required.",
  1142 + "link-labels": "Link labels",
  1143 + "link-labels-required": "Link labels is required.",
  1144 + "no-link-labels-found": "No link labels found",
  1145 + "no-link-label-matching": "'{{label}}' not found.",
  1146 + "create-new-link-label": "Create a new one!",
  1147 + "type-filter": "Filter",
  1148 + "type-filter-details": "Filter incoming messages with configured conditions",
  1149 + "type-enrichment": "Enrichment",
  1150 + "type-enrichment-details": "Add additional information into Message Metadata",
  1151 + "type-transformation": "Transformation",
  1152 + "type-transformation-details": "Change Message payload and Metadata",
  1153 + "type-action": "Action",
  1154 + "type-action-details": "Perform special action",
  1155 + "type-external": "External",
  1156 + "type-external-details": "Interacts with external system",
  1157 + "type-rule-chain": "Rule Chain",
  1158 + "type-rule-chain-details": "Forwards incoming messages to specified Rule Chain",
  1159 + "type-input": "Input",
  1160 + "type-input-details": "Logical input of Rule Chain, forwards incoming messages to next related Rule Node",
  1161 + "type-unknown": "Unknown",
  1162 + "type-unknown-details": "Unresolved Rule Node",
  1163 + "directive-is-not-loaded": "Defined configuration directive '{{directiveName}}' is not available.",
  1164 + "ui-resources-load-error": "Failed to load configuration ui resources.",
  1165 + "invalid-target-rulechain": "Unable to resolve target rule chain!",
  1166 + "test-script-function": "Test script function",
  1167 + "message": "Message",
  1168 + "message-type": "Message type",
  1169 + "select-message-type": "Select message type",
  1170 + "message-type-required": "Message type is required",
  1171 + "metadata": "Metadata",
  1172 + "metadata-required": "Metadata entries can't be empty.",
  1173 + "output": "Output",
  1174 + "test": "Test",
  1175 + "help": "Help"
  1176 + },
  1177 + "tenant": {
  1178 + "tenant": "Tenant",
  1179 + "tenants": "Tenants",
  1180 + "management": "Tenant management",
  1181 + "add": "Add Tenant",
  1182 + "admins": "Admins",
  1183 + "manage-tenant-admins": "Manage tenant admins",
  1184 + "delete": "Delete tenant",
  1185 + "add-tenant-text": "Add new tenant",
  1186 + "no-tenants-text": "No tenants found",
  1187 + "tenant-details": "Tenant details",
  1188 + "delete-tenant-title": "Are you sure you want to delete the tenant '{{tenantTitle}}'?",
  1189 + "delete-tenant-text": "Be careful, after the confirmation the tenant and all related data will become unrecoverable.",
  1190 + "delete-tenants-title": "Are you sure you want to delete { count, select, 1 {1 tenant} other {# tenants} }?",
  1191 + "delete-tenants-action-title": "Delete { count, select, 1 {1 tenant} other {# tenants} }",
  1192 + "delete-tenants-text": "Be careful, after the confirmation all selected tenants will be removed and all related data will become unrecoverable.",
  1193 + "title": "Title",
  1194 + "title-required": "Title is required.",
  1195 + "description": "Description",
  1196 + "details": "Details",
  1197 + "events": "Events",
  1198 + "copyId": "Copy tenant Id",
  1199 + "idCopiedMessage": "Tenant Id has been copied to clipboard",
  1200 + "select-tenant": "Select tenant",
  1201 + "no-tenants-matching": "No tenants matching '{{entity}}' were found.",
  1202 + "tenant-required": "Tenant is required"
  1203 + },
  1204 + "timeinterval": {
  1205 + "seconds-interval": "{ seconds, select, 1 {1 second} other {# seconds} }",
  1206 + "minutes-interval": "{ minutes, select, 1 {1 minute} other {# minutes} }",
  1207 + "hours-interval": "{ hours, select, 1 {1 hour} other {# hours} }",
  1208 + "days-interval": "{ days, select, 1 {1 day} other {# days} }",
  1209 + "days": "Days",
  1210 + "hours": "Hours",
  1211 + "minutes": "Minutes",
  1212 + "seconds": "Seconds",
  1213 + "advanced": "Advanced"
  1214 + },
  1215 + "timewindow": {
  1216 + "days": "{ days, select, 1 { day } other {# days } }",
  1217 + "hours": "{ hours, select, 0 { hour } 1 {1 hour } other {# hours } }",
  1218 + "minutes": "{ minutes, select, 0 { minute } 1 {1 minute } other {# minutes } }",
  1219 + "seconds": "{ seconds, select, 0 { second } 1 {1 second } other {# seconds } }",
  1220 + "realtime": "Realtime",
  1221 + "history": "History",
  1222 + "last-prefix": "last",
  1223 + "period": "from {{ startTime }} to {{ endTime }}",
  1224 + "edit": "Edit timewindow",
  1225 + "date-range": "Date range",
  1226 + "last": "Last",
  1227 + "time-period": "Time period"
  1228 + },
  1229 + "user": {
  1230 + "user": "User",
  1231 + "users": "Users",
  1232 + "customer-users": "Customer Users",
  1233 + "tenant-admins": "Tenant Admins",
  1234 + "sys-admin": "System administrator",
  1235 + "tenant-admin": "Tenant administrator",
  1236 + "customer": "Customer",
  1237 + "anonymous": "Anonymous",
  1238 + "add": "Add User",
  1239 + "delete": "Delete user",
  1240 + "add-user-text": "Add new user",
  1241 + "no-users-text": "No users found",
  1242 + "user-details": "User details",
  1243 + "delete-user-title": "Are you sure you want to delete the user '{{userEmail}}'?",
  1244 + "delete-user-text": "Be careful, after the confirmation the user and all related data will become unrecoverable.",
  1245 + "delete-users-title": "Are you sure you want to delete { count, select, 1 {1 user} other {# users} }?",
  1246 + "delete-users-action-title": "Delete { count, select, 1 {1 user} other {# users} }",
  1247 + "delete-users-text": "Be careful, after the confirmation all selected users will be removed and all related data will become unrecoverable.",
  1248 + "activation-email-sent-message": "Activation email was successfully sent!",
  1249 + "resend-activation": "Resend activation",
  1250 + "email": "Email",
  1251 + "email-required": "Email is required.",
  1252 + "invalid-email-format": "Invalid email format.",
  1253 + "first-name": "First Name",
  1254 + "last-name": "Last Name",
  1255 + "description": "Description",
  1256 + "default-dashboard": "Default dashboard",
  1257 + "always-fullscreen": "Always fullscreen",
  1258 + "select-user": "Select user",
  1259 + "no-users-matching": "No users matching '{{entity}}' were found.",
  1260 + "user-required": "User is required",
  1261 + "activation-method": "Activation method",
  1262 + "display-activation-link": "Display activation link",
  1263 + "send-activation-mail": "Send activation mail",
  1264 + "activation-link": "User activation link",
  1265 + "activation-link-text": "In order to activate user use the following <a href='{{activationLink}}' target='_blank'>activation link</a> :",
  1266 + "copy-activation-link": "Copy activation link",
  1267 + "activation-link-copied-message": "User activation link has been copied to clipboard",
  1268 + "details": "Details"
  1269 + },
  1270 + "value": {
  1271 + "type": "Value type",
  1272 + "string": "String",
  1273 + "string-value": "String value",
  1274 + "integer": "Integer",
  1275 + "integer-value": "Integer value",
  1276 + "invalid-integer-value": "Invalid integer value",
  1277 + "double": "Double",
  1278 + "double-value": "Double value",
  1279 + "boolean": "Boolean",
  1280 + "boolean-value": "Boolean value",
  1281 + "false": "False",
  1282 + "true": "True",
  1283 + "long": "Long"
  1284 + },
  1285 + "widget": {
  1286 + "widget-library": "Widgets Library",
  1287 + "widget-bundle": "Widgets Bundle",
  1288 + "select-widgets-bundle": "Select widgets bundle",
  1289 + "management": "Widget management",
  1290 + "editor": "Widget Editor",
  1291 + "widget-type-not-found": "Problem loading widget configuration.<br>Probably associated\n widget type was removed.",
  1292 + "widget-type-load-error": "Widget wasn't loaded due to the following errors:",
  1293 + "remove": "Remove widget",
  1294 + "edit": "Edit widget",
  1295 + "remove-widget-title": "Are you sure you want to remove the widget '{{widgetTitle}}'?",
  1296 + "remove-widget-text": "After the confirmation the widget and all related data will become unrecoverable.",
  1297 + "timeseries": "Time series",
  1298 + "search-data": "Search data",
  1299 + "no-data-found": "No data found",
  1300 + "latest-values": "Latest values",
  1301 + "rpc": "Control widget",
  1302 + "alarm": "Alarm widget",
  1303 + "static": "Static widget",
  1304 + "select-widget-type": "Select widget type",
  1305 + "missing-widget-title-error": "Widget title must be specified!",
  1306 + "widget-saved": "Widget saved",
  1307 + "unable-to-save-widget-error": "Unable to save widget! Widget has errors!",
  1308 + "save": "Save widget",
  1309 + "saveAs": "Save widget as",
  1310 + "save-widget-type-as": "Save widget type as",
  1311 + "save-widget-type-as-text": "Please enter new widget title and/or select target widgets bundle",
  1312 + "toggle-fullscreen": "Toggle fullscreen",
  1313 + "run": "Run widget",
  1314 + "title": "Widget title",
  1315 + "title-required": "Widget title is required.",
  1316 + "type": "Widget type",
  1317 + "resources": "Resources",
  1318 + "resource-url": "JavaScript/CSS URL",
  1319 + "remove-resource": "Remove resource",
  1320 + "add-resource": "Add resource",
  1321 + "html": "HTML",
  1322 + "tidy": "Tidy",
  1323 + "css": "CSS",
  1324 + "settings-schema": "Settings schema",
  1325 + "datakey-settings-schema": "Data key settings schema",
  1326 + "javascript": "Javascript",
  1327 + "remove-widget-type-title": "Are you sure you want to remove the widget type '{{widgetName}}'?",
  1328 + "remove-widget-type-text": "After the confirmation the widget type and all related data will become unrecoverable.",
  1329 + "remove-widget-type": "Remove widget type",
  1330 + "add-widget-type": "Add new widget type",
  1331 + "widget-type-load-failed-error": "Failed to load widget type!",
  1332 + "widget-template-load-failed-error": "Failed to load widget template!",
  1333 + "add": "Add Widget",
  1334 + "undo": "Undo widget changes",
  1335 + "export": "Export widget"
  1336 + },
  1337 + "widget-action": {
  1338 + "header-button": "Widget header button",
  1339 + "open-dashboard-state": "Navigate to new dashboard state",
  1340 + "update-dashboard-state": "Update current dashboard state",
  1341 + "open-dashboard": "Navigate to other dashboard",
  1342 + "custom": "Custom action",
  1343 + "target-dashboard-state": "Target dashboard state",
  1344 + "target-dashboard-state-required": "Target dashboard state is required",
  1345 + "set-entity-from-widget": "Set entity from widget",
  1346 + "target-dashboard": "Target dashboard",
  1347 + "open-right-layout": "Open right dashboard layout (mobile view)"
  1348 + },
  1349 + "widgets-bundle": {
  1350 + "current": "Current bundle",
  1351 + "widgets-bundles": "Widgets Bundles",
  1352 + "add": "Add Widgets Bundle",
  1353 + "delete": "Delete widgets bundle",
  1354 + "title": "Title",
  1355 + "title-required": "Title is required.",
  1356 + "add-widgets-bundle-text": "Add new widgets bundle",
  1357 + "no-widgets-bundles-text": "No widgets bundles found",
  1358 + "empty": "Widgets bundle is empty",
  1359 + "details": "Details",
  1360 + "widgets-bundle-details": "Widgets bundle details",
  1361 + "delete-widgets-bundle-title": "Are you sure you want to delete the widgets bundle '{{widgetsBundleTitle}}'?",
  1362 + "delete-widgets-bundle-text": "Be careful, after the confirmation the widgets bundle and all related data will become unrecoverable.",
  1363 + "delete-widgets-bundles-title": "Are you sure you want to delete { count, select, 1 {1 widgets bundle} other {# widgets bundles} }?",
  1364 + "delete-widgets-bundles-action-title": "Delete { count, select, 1 {1 widgets bundle} other {# widgets bundles} }",
  1365 + "delete-widgets-bundles-text": "Be careful, after the confirmation all selected widgets bundles will be removed and all related data will become unrecoverable.",
  1366 + "no-widgets-bundles-matching": "No widgets bundles matching '{{widgetsBundle}}' were found.",
  1367 + "widgets-bundle-required": "Widgets bundle is required.",
  1368 + "system": "System",
  1369 + "import": "Import widgets bundle",
  1370 + "export": "Export widgets bundle",
  1371 + "export-failed-error": "Unable to export widgets bundle: {{error}}",
  1372 + "create-new-widgets-bundle": "Create new widgets bundle",
  1373 + "widgets-bundle-file": "Widgets bundle file",
  1374 + "invalid-widgets-bundle-file-error": "Unable to import widgets bundle: Invalid widgets bundle data structure."
  1375 + },
  1376 + "widget-config": {
  1377 + "data": "Data",
  1378 + "settings": "Settings",
  1379 + "advanced": "Advanced",
  1380 + "title": "Title",
  1381 + "general-settings": "General settings",
  1382 + "display-title": "Display title",
  1383 + "drop-shadow": "Drop shadow",
  1384 + "enable-fullscreen": "Enable fullscreen",
  1385 + "background-color": "Background color",
  1386 + "text-color": "Text color",
  1387 + "padding": "Padding",
  1388 + "margin": "Margin",
  1389 + "widget-style": "Widget style",
  1390 + "title-style": "Title style",
  1391 + "mobile-mode-settings": "Mobile mode settings",
  1392 + "order": "Order",
  1393 + "height": "Height",
  1394 + "units": "Special symbol to show next to value",
  1395 + "decimals": "Number of digits after floating point",
  1396 + "timewindow": "Timewindow",
  1397 + "use-dashboard-timewindow": "Use dashboard timewindow",
  1398 + "display-legend": "Display legend",
  1399 + "datasources": "Datasources",
  1400 + "maximum-datasources": "Maximum { count, select, 1 {1 datasource is allowed.} other {# datasources are allowed} }",
  1401 + "datasource-type": "Type",
  1402 + "datasource-parameters": "Parameters",
  1403 + "remove-datasource": "Remove datasource",
  1404 + "add-datasource": "Add datasource",
  1405 + "target-device": "Target device",
  1406 + "alarm-source": "Alarm source",
  1407 + "actions": "Actions",
  1408 + "action": "Action",
  1409 + "add-action": "Add action",
  1410 + "search-actions": "Search actions",
  1411 + "action-source": "Action source",
  1412 + "action-source-required": "Action source is required.",
  1413 + "action-name": "Name",
  1414 + "action-name-required": "Action name is required.",
  1415 + "action-name-not-unique": "Another action with the same name already exists.<br/>Action name should be unique within the same action source.",
  1416 + "action-icon": "Icon",
  1417 + "action-type": "Type",
  1418 + "action-type-required": "Action type is required.",
  1419 + "edit-action": "Edit action",
  1420 + "delete-action": "Delete action",
  1421 + "delete-action-title": "Delete widget action",
  1422 + "delete-action-text": "Are you sure you want delete widget action with name '{{actionName}}'?"
  1423 + },
  1424 + "widget-type": {
  1425 + "import": "Import widget type",
  1426 + "export": "Export widget type",
  1427 + "export-failed-error": "Unable to export widget type: {{error}}",
  1428 + "create-new-widget-type": "Create new widget type",
  1429 + "widget-type-file": "Widget type file",
  1430 + "invalid-widget-type-file-error": "Unable to import widget type: Invalid widget type data structure."
  1431 + },
  1432 + "icon": {
  1433 + "icon": "Icon",
  1434 + "select-icon": "Select icon",
  1435 + "material-icons": "Material icons",
  1436 + "show-all": "Show all icons"
  1437 + },
  1438 + "custom": {
  1439 + "widget-action": {
  1440 + "action-cell-button": "Action cell button",
  1441 + "row-click": "On row click",
  1442 + "marker-click": "On marker click",
  1443 + "tooltip-tag-action": "Tooltip tag action"
  1444 + }
  1445 + },
  1446 + "language": {
  1447 + "language": "Language",
  1448 + "locales": {
  1449 + "zh_CN": "Chinese",
  1450 + "en_US": "English",
  1451 + "it_IT": "Italian",
  1452 + "ko_KR": "Korean",
  1453 + "ru_RU": "Russian",
  1454 + "es_ES": "Spanish"
1477 1455 }
1478   - ).name;
  1456 + }
  1457 +}
... ...