thingsboard-memoizeit
Changes
ui/src/app/app.config.js 5(+5 -0)
ui/src/app/app.run.js 2(+1 -1)
ui/src/app/locale/locale.constant.js 3(+2 -1)
ui/src/app/locale/locale.constant-es.js 818(+818 -0)
Details
ui/src/app/app.config.js 5(+5 -0)
diff --git a/ui/src/app/app.config.js b/ui/src/app/app.config.js
index 5a5b6b3..7f7e7a5 100644
--- a/ui/src/app/app.config.js
+++ b/ui/src/app/app.config.js
@@ -18,6 +18,7 @@ import UrlHandler from './url.handler';
import addLocaleKorean from './locale/locale.constant-ko';
import addLocaleChinese from './locale/locale.constant-zh';
import addLocaleRussian from './locale/locale.constant-ru';
+import addLocaleSpanish from './locale/locale.constant-es';
/* eslint-disable import/no-unresolved, import/default */
@@ -54,6 +55,7 @@ export default function AppConfig($provide,
addLocaleKorean(locales);
addLocaleChinese(locales);
addLocaleRussian(locales);
+ addLocaleSpanish(locales);
var $window = angular.injector(['ng']).get('$window');
var lang = $window.navigator.language || $window.navigator.userLanguage;
@@ -63,6 +65,9 @@ export default function AppConfig($provide,
} else if (lang === 'zh') {
$translateProvider.useSanitizeValueStrategy(null);
$translateProvider.preferredLanguage('zh_CN');
+ } else if (lang === 'es') {
+ $translateProvider.useSanitizeValueStrategy(null);
+ $translateProvider.preferredLanguage('es_ES');
}
for (var langKey in locales) {
ui/src/app/app.run.js 2(+1 -1)
diff --git a/ui/src/app/app.run.js b/ui/src/app/app.run.js
index 75b16fd..1e36600 100644
--- a/ui/src/app/app.run.js
+++ b/ui/src/app/app.run.js
@@ -36,7 +36,7 @@ export default function AppRun($rootScope, $window, $injector, $location, $log,
}
initWatchers();
-
+
function initWatchers() {
$rootScope.unauthenticatedHandle = $rootScope.$on('unauthenticated', function (event, doLogout) {
if (doLogout) {
ui/src/app/locale/locale.constant.js 3(+2 -1)
diff --git a/ui/src/app/locale/locale.constant.js b/ui/src/app/locale/locale.constant.js
index 1768f67..0366379 100644
--- a/ui/src/app/locale/locale.constant.js
+++ b/ui/src/app/locale/locale.constant.js
@@ -812,7 +812,8 @@ export default angular.module('thingsboard.locale', [])
"en_US": "English",
"ko_KR": "Korean",
"zh_CN": "Chinese",
- "ru_RU": "Russian"
+ "ru_RU": "Russian",
+ "es_ES": "Español"
}
}
}
ui/src/app/locale/locale.constant-es.js 818(+818 -0)
diff --git a/ui/src/app/locale/locale.constant-es.js b/ui/src/app/locale/locale.constant-es.js
new file mode 100644
index 0000000..153019d
--- /dev/null
+++ b/ui/src/app/locale/locale.constant-es.js
@@ -0,0 +1,818 @@
+/*
+ * Copyright © 2016-2017 The Thingsboard Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ export default function addLocaleSpanish(locales) {
+ var es_ES = {
+ "access": {
+ "unauthorized": "No autorizado",
+ "unauthorized-access": "Acceso no autorizado",
+ "unauthorized-access-text": "Debes iniciar sesión para tener acceso a este recurso!",
+ "access-forbidden": "Acceso Prohibido",
+ "access-forbidden-text": "No tienes derechos para acceder a esta ubicación!<br/>Intenta iniciar sesión con otro usuario si todavía quieres acceder a esta ubicación.",
+ "refresh-token-expired": "La sesión ha expirado",
+ "refresh-token-failed": "No se puede actualizar la sesión"
+ },
+ "action": {
+ "activate": "Activar",
+ "suspend": "Suspender",
+ "save": "Guardar",
+ "saveAs": "Guardar como",
+ "cancel": "Cancelar",
+ "ok": "OK",
+ "delete": "Borrar",
+ "add": "Agregar",
+ "yes": "Si",
+ "no": "No",
+ "update": "Actualizar",
+ "remove": "Eliminar",
+ "search": "Buscar",
+ "assign": "Asignar",
+ "unassign": "Cancelar asignación",
+ "share": "Compartir",
+ "make-private": "Hacer privado",
+ "apply": "Aplicar",
+ "apply-changes": "Aplicar cambios",
+ "edit-mode": "Modo Edición",
+ "enter-edit-mode": "Modo Edición",
+ "decline-changes": "Descartar cambios",
+ "close": "Cerrar",
+ "back": "Atrás",
+ "run": "Correr",
+ "sign-in": "Regístrate!",
+ "edit": "Editar",
+ "view": "Ver",
+ "create": "Crear",
+ "drag": "Arrastrar",
+ "refresh": "Refrescar",
+ "undo": "Deshacer",
+ "copy": "Copiar",
+ "paste": "Pegar",
+ "import": "Importar",
+ "export": "Exportar",
+ "share-via": "Compartir vía {{provider}}"
+ },
+ "aggregation": {
+ "aggregation": "Agregación",
+ "function": "Función de Agregación",
+ "limit": "Valores Max",
+ "group-interval": "Intervalo de agrupación",
+ "min": "Min",
+ "max": "Max",
+ "avg": "Promedio",
+ "sum": "Suma",
+ "count": "Cuenta",
+ "none": "Ninguno"
+ },
+ "admin": {
+ "general": "General",
+ "general-settings": "Ajustes General",
+ "outgoing-mail": "Mail de Salida",
+ "outgoing-mail-settings": "Ajustes del Mail de Salida",
+ "system-settings": "Sistema",
+ "test-mail-sent": "Mail de prueba enviado correctamente!",
+ "base-url": "URL Base",
+ "base-url-required": "URL Base requerida.",
+ "mail-from": "Mail Desde",
+ "mail-from-required": "Mail Desde requerido.",
+ "smtp-protocol": "Protocolo SMTP",
+ "smtp-host": "Host SMTP",
+ "smtp-host-required": "Host SMTP requerido.",
+ "smtp-port": "Puerto SMTP",
+ "smtp-port-required": "Debe ingresar un Puerto SMTP.",
+ "smtp-port-invalid": "No parece un Puerto SMTP valido.",
+ "timeout-msec": "Timeout (ms)",
+ "timeout-required": "Timeout requerido.",
+ "timeout-invalid": "No parece un Timeout valido.",
+ "enable-tls": "Habilitar TLS",
+ "send-test-mail": "Enviar mail de prueba"
+ },
+ "attribute": {
+ "attributes": "Atributos",
+ "latest-telemetry": "Última telemetría",
+ "attributes-scope": "Alcance de los atributos del dispositivo",
+ "scope-latest-telemetry": "Última telemetría",
+ "scope-client": "Atributos del Cliente",
+ "scope-server": "Atributos del Servidor",
+ "scope-shared": "Atributos Compartidos",
+ "add": "Agregar atributo",
+ "key": "Clave",
+ "key-required": "Clave del atributo requerida.",
+ "value": "Valor",
+ "value-required": "Valor del atributo requerido.",
+ "delete-attributes-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 atributo} other {# atributos} }?",
+ "delete-attributes-text": "Ten cuidado, luego de confirmar el atributo será eliminado, y la información relacionada será irrecuperable.",
+ "delete-attributes": "Borrar atributo",
+ "enter-attribute-value": "Ingresar valor del atributo",
+ "show-on-widget": "Mostrar en Widget",
+ "widget-mode": "Widget",
+ "next-widget": "Widget siguiente",
+ "prev-widget": "Widget anterior",
+ "add-to-dashboard": "Agregar al Panel",
+ "add-widget-to-dashboard": "Agregar widget al Panel",
+ "selected-attributes": "{ count, select, 1 {1 atributo} other {# atributos} } seleccionados",
+ "selected-telemetry": "{ count, select, 1 {1 unidad de telemetría } other {# unidades de telemetría} } seleccionadas."
+ },
+ "confirm-on-exit": {
+ "message": "Tienes cambios sin guardar. ¿Estás seguro que quieres abandonar la página?",
+ "html-message": "Tienes cambios sin guardar.<br/>¿Estás seguro que quieres abandonar la página?",
+ "title": "Cambios sin guardar"
+ },
+ "contact": {
+ "country": "País",
+ "city": "Ciudad",
+ "state": "Estado/Provincia",
+ "postal-code": "Código Postal",
+ "postal-code-invalid": "Solo se permiten dígitos.",
+ "address": "Dirección",
+ "address2": "Dirección 2",
+ "phone": "Teléfono",
+ "email": "Email",
+ "no-address": "Sin Dirección"
+ },
+ "common": {
+ "username": "Usuario",
+ "password": "Contraseña",
+ "enter-username": "Ingresa el nombre de usuario.",
+ "enter-password": "Ingresa la contraseña",
+ "enter-search": "Ingresa búsqueda"
+ },
+ "customer": {
+ "customers": "Clientes",
+ "management": "Gestión de Clientes",
+ "dashboard": "Panel del Cliente",
+ "dashboards": "Paneles del Cliente",
+ "devices": "Panel del Cliente",
+ "public-dashboards": "Paneles Públicos",
+ "public-devices": "Dispositivos Públicos",
+ "add": "Agregar cliente",
+ "delete": "Borrar cliente",
+ "manage-customer-users": "Gestionar usuarios del cliente",
+ "manage-customer-devices": "Gestionar dispositivos del cliente",
+ "manage-customer-dashboards": "Gestionar paneles del cliente",
+ "manage-public-devices": "Gestionar dispositivos públicos",
+ "manage-public-dashboards": "Gestionar paneles públicos",
+ "add-customer-text": "Agregar nuevo cliente",
+ "no-customers-text": "No se encontrar clientes",
+ "customer-details": "Detalles del cliente",
+ "delete-customer-title": "¿Estás seguro que quieres eliminar el cliente '{{customerTitle}}'?",
+ "delete-customer-text": "Ten cuidado, luego de confirmar el cliente será eliminado y toda la información relacionada será irrecuperable.",
+ "delete-customers-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 cliente} other {# clientes} }?",
+ "delete-customers-action-title": "Borrar { count, select, 1 {1 cliente} other {# clientes} }",
+ "delete-customers-text": "Ten cuidado, luego de confirmar todos los clientes seleccionados serán eliminados y su información relacionada será irrecuperable.",
+ "manage-users": "Gestionar usuarios",
+ "manage-devices": "Gestionar dispositivos",
+ "manage-dashboards": "Gestionar paneles",
+ "title": "Título",
+ "title-required": "Título requerido.",
+ "description": "Descripción"
+ },
+ "datetime": {
+ "date-from": "Fecha desde",
+ "time-from": "Tiempo desde",
+ "date-to": "Fecha hasta",
+ "time-to": "Tiempo hasta"
+ },
+ "dashboard": {
+ "dashboard": "Panel",
+ "dashboards": "Paneles",
+ "management": "Gestión de Paneles",
+ "view-dashboards": "Ver paneles",
+ "add": "Agregar Panel",
+ "assign-dashboard-to-customer": "Asignar panel(es) a cliente",
+ "assign-dashboard-to-customer-text": "Por favor, seleccione algún panel para asignar al Cliente.",
+ "assign-to-customer-text": "Por favor, seleccione algún cliente para asignar al(los) panel(es).",
+ "assign-to-customer": "Asignar a cliente",
+ "unassign-from-customer": "Desasignar del cliente",
+ "make-public": "Hacer panel público",
+ "make-private": "Hacer panel privado",
+ "no-dashboards-text": "Ningún panel encontrado",
+ "no-widgets": "Ningún widget configurado",
+ "add-widget": "Agregar nuevo widget",
+ "title": "Titulo",
+ "select-widget-title": "Seleccionar widget",
+ "select-widget-subtitle": "Lista de tipos de widgets",
+ "delete": "Eliminar panel",
+ "title-required": "Título requerido.",
+ "description": "Descripción",
+ "details": "Detalles",
+ "dashboard-details": "Detalles del panel",
+ "add-dashboard-text": "Agregar nuevo panel",
+ "assign-dashboards": "Asignar paneles",
+ "assign-new-dashboard": "Asignar nuevo panel",
+ "assign-dashboards-text": "Asignar { count, select, 1 {1 panel} other {# paneles} } al cliente",
+ "delete-dashboards": "Eliminar paneles",
+ "unassign-dashboards": "Desasignar paneles",
+ "unassign-dashboards-action-title": "Desasignar { count, select, 1 {1 paneles} other {# paneles} } del cliente",
+ "delete-dashboard-title": "¿Estás seguro que quieres eliminar el panel '{{dashboardTitle}}'?",
+ "delete-dashboard-text": "Ten cuidado, el panel seleccionado será eliminado y la información relacionada sera irrecuperable.",
+ "delete-dashboards-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 panel} other {# paneles} }?",
+ "delete-dashboards-action-title": "Eliminar { count, select, 1 {1 panel} other {# paneles} }",
+ "delete-dashboards-text": "Ten cuidado, los paneles seleccionados serán eliminados y la información relacionada será irrecuperable.",
+ "unassign-dashboard-title": "¿Estás seguro que quieres desasignar el panel '{{dashboardTitle}}'?",
+ "unassign-dashboard-text": "Luego de confirmar, el panel será desasignado y no podrá ser accesible por el cliente.",
+ "unassign-dashboard": "Desasignar panel",
+ "unassign-dashboards-title": "¿Estás seguro que quieres desasignar { count, select, 1 {1 panel} other {# paneles} }?",
+ "unassign-dashboards-text": "Luego de confirmar, los paneles seleccionados serán desasignados y no podrán ser accesibles por el cliente.",
+ "public-dashboard-title": "El panel ahora es público",
+ "public-dashboard-text": "Tu panel <b>{{dashboardTitle}}</b> es ahora público y podrá ser accedido desde: <a href='{{publicLink}}' target='_blank'>aquí</a>:",
+ "public-dashboard-notice": "<b>Nota:</b> No olvides hacer públicos los dispositivos relacionados para acceder a sus datos.",
+ "make-private-dashboard-title": "¿Estás seguro que quieres hacer el panel '{{dashboardTitle}}' privado?",
+ "make-private-dashboard-text": "Luego de confirmar, el panel será privado y no podrá ser accesible por otros.",
+ "make-private-dashboard": "Hacer panel privado",
+ "socialshare-text": "'{{dashboardTitle}}' powered by ThingsBoard",
+ "socialshare-title": "'{{dashboardTitle}}' powered by ThingsBoard",
+ "select-dashboard": "Seleccionar panel",
+ "no-dashboards-matching": "Panel '{{dashboard}}' no encontrado.",
+ "dashboard-required": "Panel requerido.",
+ "select-existing": "Seleccionar paneles existentes",
+ "create-new": "Crear nuevo panel",
+ "new-dashboard-title": "Nuevo título",
+ "open-dashboard": "Abrir panel",
+ "set-background": "Definir fondo",
+ "background-color": "Color de fondo",
+ "background-image": "Imagen de fondo",
+ "background-size-mode": "Modo tamaño de fondo",
+ "no-image": "No se ha seleccionado ningúna imagen",
+ "drop-image": "Suelte una imagen o haga clic para seleccionar un archivo para cargar.",
+ "settings": "Ajustes",
+ "columns-count": "Número de columnas",
+ "columns-count-required": "Número de columnas requerido.",
+ "min-columns-count-message": "Solo se permite un número mínimo de 10 columnas.",
+ "max-columns-count-message": "Solo se permite un número máximo de 1000 columnas.",
+ "widgets-margins": "Margen entre widgets",
+ "horizontal-margin": "Margen horizontal",
+ "horizontal-margin-required": "Margen horizontal requerido.",
+ "min-horizontal-margin-message": "Solo se permite margen horizontal mínimo de 0.",
+ "max-horizontal-margin-message": "Solo se permite margen horizontal máximo de 50.",
+ "vertical-margin": "Margen vertical",
+ "vertical-margin-required": "Margen vertical requerido.",
+ "min-vertical-margin-message": "Solo se permite margen vertical mínimo de 0.",
+ "max-vertical-margin-message": "Solo se permite margen vertical máximo de 50.",
+ "display-title": "Mostrar título del panel",
+ "title-color": "Color del título",
+ "display-device-selection": "Mostrar selección de dispositivo",
+ "display-dashboard-timewindow": "Mostrar ventana de tiempo",
+ "display-dashboard-export": "Mostrar exportar",
+ "import": "Importar panel",
+ "export": "Exportar panel",
+ "export-failed-error": "Imposible exportar panel: {{error}}",
+ "create-new-dashboard": "Crear nuevo panel",
+ "dashboard-file": "Archivo del panel",
+ "invalid-dashboard-file-error": "Imposible importar panel: Estructura de datos inválida.",
+ "dashboard-import-missing-aliases-title": "Configurar alias utilizados por el panel importado",
+ "create-new-widget": "Crear nuevo widget",
+ "import-widget": "Importar widget",
+ "widget-file": "Archivo de widget",
+ "invalid-widget-file-error": "Imposible importar widget: Estructura de datos inválida.",
+ "widget-import-missing-aliases-title": "Configurar alias utilizados por el widget",
+ "open-toolbar": "Abrir toolbar del panel",
+ "close-toolbar": "Cerrar toolbar",
+ "configuration-error": "Error de configuración",
+ "alias-resolution-error-title": "Error de configuración de alias del panel",
+ "invalid-aliases-config": "No se puede encontrar ningún dispositivo que coincida con algunos de los alias de filtro.<br/>" +
+ "Póngase en contacto con su administrador para resolver este problema.",
+ "select-devices": "Seleccionar dispositivos",
+ "assignedToCustomer": "Asignado al cliente",
+ "public": "Público",
+ "public-link": "Link público",
+ "copy-public-link": "Copiar link público",
+ "public-link-copied-message": "El link público del panel se ha copiado al portapapeles"
+ },
+ "datakey": {
+ "settings": "Ajustes",
+ "advanced": "Avanzado",
+ "label": "Etiqueta",
+ "color": "Color",
+ "data-generation-func": "Función de generación de datos",
+ "use-data-post-processing-func": "Usar funcíon de post-procesamiendo de datos",
+ "configuration": "Ajustes de clave de datos",
+ "timeseries": "Serie de tiempos",
+ "attributes": "Atributos",
+ "timeseries-required": "Series de tiempo del dispositivo requerido.",
+ "timeseries-or-attributes-required": "Series de tiempo/Atributos requeridos.",
+ "function-types": "Tipos de funciones",
+ "function-types-required": "Tipos de funciones requerido."
+ },
+ "datasource": {
+ "type": "Típo de fuente de datos",
+ "add-datasource-prompt": "Por favor, agrega una fuente de datos"
+ },
+ "details": {
+ "edit-mode": "Modo Edición",
+ "toggle-edit-mode": "Ir a Modo Edición"
+ },
+ "device": {
+ "device": "Dispositivo",
+ "device-required": "Dispositivo requerido.",
+ "devices": "Dispositivos",
+ "management": "Gestión de Dispositivos",
+ "view-devices": "Ver dispositivos",
+ "device-alias": "Alias de dispositivo",
+ "aliases": "Alias de dispositivos",
+ "no-alias-matching": "'{{alias}}' no encontrado.",
+ "no-aliases-found": "Ningún alias encontrado.",
+ "no-key-matching": "'{{key}}' no encontrado.",
+ "no-keys-found": "Ninguna clave encontrada.",
+ "create-new-alias": "Crear nuevo alias!",
+ "create-new-key": "Crear nueva clave!",
+ "duplicate-alias-error": "Alias duplicado '{{alias}}'.<br> El alias de los dispositivos deben ser únicos dentro del panel.",
+ "configure-alias": "Configurar alias '{{alias}}'",
+ "no-devices-matching": "No se encontró dispositivo '{{device}}'",
+ "alias": "Alias",
+ "alias-required": "Alias de dispositivo requerido.",
+ "remove-alias": "Eliminar alias",
+ "add-alias": "Agregar alias",
+ "name-starts-with": "Nombre empieza con",
+ "device-list": "Lista de dispositivos",
+ "use-device-name-filter": "Usar filtro",
+ "device-list-empty": "Ningún dispositivo seleccionado.",
+ "device-name-filter-required": "Nombre de filtro requerido.",
+ "device-name-filter-no-device-matched": "Ningún dispositivo encontrado que comience con '{{device}}'.",
+ "add": "Agregar dispositivo",
+ "assign-to-customer": "Asignar a cliente",
+ "assign-device-to-customer": "Asignar dispositivo(s) a Cliente",
+ "assign-device-to-customer-text": "Por favor, seleccione los dispositivos que serán asignados al cliente",
+ "make-public": "Hacer dispositivo público",
+ "make-private": "Hacer dispositivo privado",
+ "no-devices-text": "Ningún dispositivo encontrado",
+ "assign-to-customer-text": "Por favor, seleccione el cliente para asignar el(los) dispositivo(s)",
+ "device-details": "Detalles del dispositivo",
+ "add-device-text": "Agregar nuevo dispositivo",
+ "credentials": "Credenciales",
+ "manage-credentials": "Gestionar credenciales",
+ "delete": "Eliminar dispositivo",
+ "assign-devices": "Asignar dispositivo",
+ "assign-devices-text": "Asignar { count, select, 1 {1 dispositivo} other {# dispositivos} } al cliente",
+ "delete-devices": "Eliminar dispositivo",
+ "unassign-from-customer": "Desasignar del cliente",
+ "unassign-devices": "Desasignar dispositivos",
+ "unassign-devices-action-title": "Desasignar { count, select, 1 {1 dispositivo} other {# dispositivos} } del cliente",
+ "assign-new-device": "Asignar nuevo dispositivo",
+ "make-public-device-title": "¿Estás seguro que quieres hacer el dispositivo '{{deviceName}}' público?",
+ "make-public-device-text": "Luego de confirmar, el dispositivo y la información relacionada serán públicos y podrá ser accesible por otros.",
+ "make-private-device-title": "¿Estás seguro que quieres hacer el dispositivo '{{deviceName}}' privado?",
+ "make-private-device-text": "Luego de confirmar, el dispositivo y la información relacionada serán privados y no podrá ser accesible por otros.",
+ "view-credentials": "Ver credenciales",
+ "delete-device-title": "¿Estás seguro que quieres eliminar el dispositivo '{{deviceName}}'?",
+ "delete-device-text": "Ten cuidado, luego de confirmar los dispositivos serán eliminados y la información relacionada será irrecuperable.",
+ "delete-devices-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 dispositivo} other {# dispositivos} }?",
+ "delete-devices-action-title": "Eliminar { count, select, 1 {1 dispositivo} other {# dispositivos} }",
+ "delete-devices-text": "Ten cuidado, luego de confirmar los dispositivos seleccionados serán eliminados y la información relacionada será irrecuperable.",
+ "unassign-device-title": "¿Estás seguro que quieres desasignar el dispositivo '{{deviceName}}'?",
+ "unassign-device-text": "Luego de confirmar el dispositivo será desasignado y no podrá ser accesible por el cliente.",
+ "unassign-device": "Desasignar dispositivo",
+ "unassign-devices-title": "¿Estás seguro que quieres desasignar { count, select, 1 {1 dispositivo} other {# dispositivos} }?",
+ "unassign-devices-text": "Luego de confirmar los dispositivos seleccionados serán desasignados y no podrán ser accedidos por el cliente.",
+ "device-credentials": "Credenciales del dispositivo",
+ "credentials-type": "Tipo de credencial",
+ "access-token": "Access token",
+ "access-token-required": "Access token requerido.",
+ "access-token-invalid": "Access token debe tener entre 1 a 20 caracteres.",
+ "rsa-key": "Clave pública RSA",
+ "rsa-key-required": "Clave pública RSA requerida.",
+ "secret": "Secreta",
+ "secret-required": "Secreta requerida.",
+ "name": "Nombre",
+ "name-required": "Nombre requerido.",
+ "description": "Descripción",
+ "events": "Eventos",
+ "details": "Detalles",
+ "copyId": "Copiar ID",
+ "copyAccessToken": "Copiar access token",
+ "idCopiedMessage": "Id del dispositivo copiado al portapapeles",
+ "accessTokenCopiedMessage": "Access token del dispositivo copiado al portapapeles",
+ "assignedToCustomer": "Asignado al cliente",
+ "unable-delete-device-alias-title": "Imposible eliminar alias del dispositivo",
+ "unable-delete-device-alias-text": "Alias '{{deviceAlias}}' no puede ser eliminado. Esta siendo usado por el(los) widget(s):<br/>{{widgetsList}}",
+ "is-gateway": "Es gateway",
+ "public": "Público",
+ "device-public": "Dispositivo público"
+ },
+ "dialog": {
+ "close": "Cerrar cuadro de diálogo"
+ },
+ "error": {
+ "unable-to-connect": "Imposible conectar con el servidor! Por favor, revise su conexión a internet.",
+ "unhandled-error-code": "Código de error no manejado: {{errorCode}}",
+ "unknown-error": "Error desconocido"
+ },
+ "event": {
+ "event-type": "Tipo de evento",
+ "type-alarm": "Alarma",
+ "type-error": "Error",
+ "type-lc-event": "Ciclo de vida",
+ "type-stats": "Estadísticas",
+ "no-events-prompt": "Ningún evento encontrado.",
+ "error": "Error",
+ "alarm": "Alarma",
+ "event-time": "Hora del evento",
+ "server": "Servidor",
+ "body": "Cuerpo",
+ "method": "Método",
+ "event": "Evento",
+ "status": "Status",
+ "success": "Éxito",
+ "failed": "Fallo",
+ "messages-processed": "Mensajes procesados",
+ "errors-occurred": "Ocurrieron errores"
+ },
+ "fullscreen": {
+ "expand": "Expandir a Pantalla Completa",
+ "exit": "Salir de Pantalla Completa",
+ "toggle": "Cambiar el modo de Pantalla Completa",
+ "fullscreen": "Pantalla Completa"
+ },
+ "function": {
+ "function": "Función"
+ },
+ "grid": {
+ "delete-item-title": "¿Estás seguro que quieres eliminar este item?",
+ "delete-item-text": "Ten cuidado, luego de confirmar el item será eliminado y la información relacionada será irrecuperable.",
+ "delete-items-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 item} other {# items} }?",
+ "delete-items-action-title": "Eliminar { count, select, 1 {1 item} other {# items} }",
+ "delete-items-text": "Ten cuidado, luego de confirmar los items seleccionados serán eliminados y la información relacionada será irrecuperable.",
+ "add-item-text": "Agregar nuevo item",
+ "no-items-text": "Ningún item encontrado",
+ "item-details": "Detalles del item",
+ "delete-item": "Borrar Item",
+ "delete-items": "Borrar Items",
+ "scroll-to-top": "Ir hacia arriba"
+ },
+ "help": {
+ "goto-help-page": "Ir a Página de Ayuda"
+ },
+ "home": {
+ "home": "Principal",
+ "profile": "Perfil",
+ "logout": "Salir",
+ "menu": "Menu",
+ "avatar": "Avatar",
+ "open-user-menu": "Abrir menú de usuario"
+ },
+ "import": {
+ "no-file": "Ningún archivo seleccionado",
+ "drop-file": "Arrastra un archivo JSON o clickea para seleccionar uno."
+ },
+ "item": {
+ "selected": "Seleccionado"
+ },
+ "js-func": {
+ "no-return-error": "La función debe retornar un valor!",
+ "return-type-mismatch": "La función debe retornar un valor de tipo: '{{type}}'!"
+ },
+ "legend": {
+ "position": "Posición de leyenda",
+ "show-max": "Mostrar máximo",
+ "show-min": "Mostrar mínimo",
+ "show-avg": "Mostrar promedio",
+ "show-total": "Mostrar total",
+ "settings": "Ajustes de leyenda.",
+ "min": "min",
+ "max": "max",
+ "avg": "prom",
+ "total": "total"
+ },
+ "login": {
+ "login": "Ingresar",
+ "request-password-reset": "Pedir restablecer contraseña",
+ "reset-password": "Restablecer contraseña",
+ "create-password": "Crear contraseña",
+ "passwords-mismatch-error": "Las contraseñas deben ser las mismas!",
+ "password-again": "Reingresa la contraseña",
+ "sign-in": "Iniciar sesión",
+ "username": "Usuario (email)",
+ "remember-me": "Recordar",
+ "forgot-password": "¿Olvidaste tu contraseña?",
+ "password-reset": "Restablecer Contraseña",
+ "new-password": "Nueva contraseña",
+ "new-password-again": "Repita la nueva contraseña",
+ "password-link-sent-message": "Se ha enviado el enlace de restablecimiento de contraseña con éxito!",
+ "email": "Email"
+ },
+ "plugin": {
+ "plugins": "Plugins",
+ "delete": "Eliminar plugin",
+ "activate": "Activar plugin",
+ "suspend": "Suspender plugin",
+ "active": "Activo",
+ "suspended": "Suspendido",
+ "name": "Nombre",
+ "name-required": "Nombre requerido.",
+ "description": "Descripción",
+ "add": "Agregar Plugin",
+ "delete-plugin-title": "¿Estás seguro que quieres eliminar el plugin '{{pluginName}}'?",
+ "delete-plugin-text": "Ten cuidado, luego de confirmar el plugin será eliminado y la información relacionada será irrecuperable.",
+ "delete-plugins-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 plugin} other {# plugins} }?",
+ "delete-plugins-action-title": "Eliminar { count, select, 1 {1 plugin} other {# plugins} }",
+ "delete-plugins-text": "Ten cuidado, luego de confirmar todos los plugins seleccionados serán eliminados y la información relacionada será irrecuperable.",
+ "add-plugin-text": "Agregar nuevo plugin",
+ "no-plugins-text": "Ningún plugin encontrado",
+ "plugin-details": "Detalles",
+ "api-token": "API token",
+ "api-token-required": "API token requerido.",
+ "type": "Tipo del plugin",
+ "type-required": "Tipo requerido.",
+ "configuration": "Ajustes del plugin",
+ "system": "Sistema",
+ "select-plugin": "plugin",
+ "plugin": "Plugin",
+ "no-plugins-matching": "No se encontraron plugins: '{{plugin}}'",
+ "plugin-required": "Plugin requerido.",
+ "plugin-require-match": "Por favor, elija un plugin existente.",
+ "events": "Eventos",
+ "details": "Detalles",
+ "import": "Importar plugin",
+ "export": "Exportar plugin",
+ "export-failed-error": "Imposible exportar plugin: {{error}}",
+ "create-new-plugin": "Crear nuevo plugin",
+ "plugin-file": "Archivo",
+ "invalid-plugin-file-error": "Imposible de importar plugin: Estructura de datos inválida."
+ },
+ "position": {
+ "top": "Arriba",
+ "bottom": "Abajo",
+ "left": "Izquierda",
+ "right": "Derecha"
+ },
+ "profile": {
+ "profile": "Perfil",
+ "change-password": "Cambiar contraseña",
+ "current-password": "Contraseña actual"
+ },
+ "rule": {
+ "rules": "Reglas",
+ "delete": "Eliminar regla",
+ "activate": "Activar regla",
+ "suspend": "Suspender regla",
+ "active": "Activada",
+ "suspended": "Suspendida",
+ "name": "Nombre",
+ "name-required": "Nombre requerido.",
+ "description": "Descripción",
+ "add": "Agregar Regla",
+ "delete-rule-title": "¿Estás seguro que quieres eliminar la regla '{{ruleName}}'?",
+ "delete-rule-text": "Ten cuidado, luego de confirmar la regla será eliminada y la información relacionada será irrecuperable.",
+ "delete-rules-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 regla} other {# reglas} }?",
+ "delete-rules-action-title": "Eliminar { count, select, 1 {1 regla} other {# reglas} }",
+ "delete-rules-text": "Ten cuidado, luego de confirmar todas las reglas seleccionadas serán borradas y la información relacionada será irrecuperable.",
+ "add-rule-text": "Agregar nueva regla",
+ "no-rules-text": "Ninguna regla encontrada",
+ "rule-details": "Detalles",
+ "filters": "Filtros",
+ "filter": "Filtro",
+ "add-filter-prompt": "Por favor, ingresa un filtro",
+ "remove-filter": "Eliminar filtro",
+ "add-filter": "Agregar filtro",
+ "filter-name": "Nombre",
+ "filter-type": "Tipo",
+ "edit-filter": "Editar filtro",
+ "view-filter": "Ver filtro",
+ "component-name": "Nombre",
+ "component-name-required": "Nombre requerido.",
+ "component-type": "Tipo",
+ "component-type-required": "Tipo requerido.",
+ "processor": "Procesador",
+ "no-processor-configured": "Ningún procesador encontrado",
+ "create-processor": "Crear procesador",
+ "processor-name": "Nombre",
+ "processor-type": "Tipo",
+ "plugin-action": "Acción del Plugin",
+ "action-name": "Nombre",
+ "action-type": "Tipo",
+ "create-action-prompt": "Por favor, crea una acción.",
+ "create-action": "Crear acción",
+ "details": "Detalles",
+ "events": "Eventos",
+ "system": "Sistema",
+ "import": "Importar regla",
+ "export": "Exportar regla",
+ "export-failed-error": "Imposible de exportar regla: {{error}}",
+ "create-new-rule": "Crear nueva regla",
+ "rule-file": "Archivo",
+ "invalid-rule-file-error": "Imposible de importar regla: Estructura de datos inválida."
+ },
+ "rule-plugin": {
+ "management": "Gestión de Reglas y Plugins"
+ },
+ "tenant": {
+ "tenants": "Tenants",
+ "management": "Gestión de Tenant",
+ "add": "Agregar Tenant",
+ "admins": "Admins",
+ "manage-tenant-admins": "Gestionar administradores tenant",
+ "delete": "Eliminar tenant",
+ "add-tenant-text": "Agregar nuevo tenant",
+ "no-tenants-text": "Ningún tenant encontrado",
+ "tenant-details": "Detalles del Tenant",
+ "delete-tenant-title": "¿Estás seguro que quieres eliminar el tenant '{{tenantTitle}}'?",
+ "delete-tenant-text": "Ten cuidado, luego de confirmar el tenant será eliminado y la información relacionada será irrecuperable.",
+ "delete-tenants-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 tenant} other {# tenants} }?",
+ "delete-tenants-action-title": "Eliminar { count, select, 1 {1 tenant} other {# tenants} }",
+ "delete-tenants-text": "Ten cuidado, luego de confirmar los tenants seleccionados serán eliminados y la información relacionada será irrecuperable.",
+ "title": "Título",
+ "title-required": "Título requerido.",
+ "description": "Descripción"
+ },
+ "timeinterval": {
+ "seconds-interval": "{ seconds, select, 1 {1 segundo} other {# segundos} }",
+ "minutes-interval": "{ minutes, select, 1 {1 minuto} other {# minutos} }",
+ "hours-interval": "{ hours, select, 1 {1 hora} other {# horas} }",
+ "days-interval": "{ days, select, 1 {1 día} other {# días} }",
+ "days": "Días",
+ "hours": "Horas",
+ "minutes": "Minutos",
+ "seconds": "Segundos",
+ "advanced": "Avanzado"
+ },
+ "timewindow": {
+ "days": "{ days, select, 1 { día } other {# días } }",
+ "hours": "{ hours, select, 0 { horas } 1 {1 hora } other {# horas } }",
+ "minutes": "{ minutes, select, 0 { minutos } 1 {1 minuto } other {# minutos } }",
+ "seconds": "{ seconds, select, 0 { segundos } 1 {1 segundo } other {# segundos } }",
+ "realtime": "Tiempo-real",
+ "history": "Histórico",
+ "last-prefix": "último",
+ "period": "desde {{ startTime }} hasta {{ endTime }}",
+ "edit": "Editar ventana de tiempo",
+ "date-range": "Rango de fechas",
+ "last": "Últimos",
+ "time-period": "Período de tiempo"
+ },
+ "user": {
+ "users": "Usuarios",
+ "customer-users": "Usuarios del Cliente",
+ "tenant-admins": "Tenant Admins",
+ "sys-admin": "Administrador del Sistema",
+ "tenant-admin": "Administrador Tenant",
+ "customer": "Cliente",
+ "anonymous": "Anónimo",
+ "add": "Agregar usuario",
+ "delete": "Eliminar usuario",
+ "add-user-text": "Agregar nuevo usuario",
+ "no-users-text": "Ningún usuario encontrado",
+ "user-details": "Detalles del usuario",
+ "delete-user-title": "¿Estás seguro que quieres eliminar el usuario '{{userEmail}}'?",
+ "delete-user-text": "Ten cuidado, luego de confirmar el usuario seleccionado será eliminado y la información relacionada será irrecuperable.",
+ "delete-users-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 usuario} other {# usuarios} }?",
+ "delete-users-action-title": "Borrar { count, select, 1 {1 usuario} other {# usuarios} }",
+ "delete-users-text": "Ten cuidado, luego de confirmar los usuarios seleccionados serán eliminados y la información relacionada será irrecuperable.",
+ "activation-email-sent-message": "Mail de activación enviado con éxito!",
+ "resend-activation": "Reenviar activación",
+ "email": "Email",
+ "email-required": "Email requerido.",
+ "first-name": "Nombre",
+ "last-name": "Apellido",
+ "description": "Descripción",
+ "default-dashboard": "Panel por defecto",
+ "always-fullscreen": "Siempre en pantalla completa"
+ },
+ "value": {
+ "type": "Tipo de valor",
+ "string": "Cadena de texto",
+ "string-value": "Valor de cadena de texto",
+ "integer": "Nro entero",
+ "integer-value": "Valor de nro entero",
+ "invalid-integer-value": "Valor inválido",
+ "double": "Nro decimal",
+ "double-value": "Valor nro decimal",
+ "boolean": "Booleano",
+ "boolean-value": "Valor booleano",
+ "false": "Falso",
+ "true": "Verdadero"
+ },
+ "widget": {
+ "widget-library": "Bibloteca de Widgets",
+ "widget-bundle": "Paquetes de Widgets",
+ "select-widgets-bundle": "Seleccionar paquete de widgets",
+ "management": "Gestión de Widgets",
+ "editor": "Editor de widgets",
+ "widget-type-not-found": "Problema al cargar la configuración del widget.<br>Probablemente asociado\n El tipo de widget fue eliminado.",
+ "widget-type-load-error": "Widget no pudo ser cargado debido a estos errores:",
+ "remove": "Eliminar widget",
+ "edit": "Editar widget",
+ "remove-widget-title": "¿Estás seguro que quieres eliminar el widget '{{widgetTitle}}'?",
+ "remove-widget-text": "Luego de confirmar el widget será eliminado y toda la información relacionada será irrecuperable..",
+ "timeseries": "Series de tiempo",
+ "latest-values": "Últimos valores",
+ "rpc": "Widget de control",
+ "static": "Widget estático",
+ "select-widget-type": "Seleccionar tipo de widget",
+ "missing-widget-title-error": "El titulo del widget debe ser especificado!",
+ "widget-saved": "Widget guardado",
+ "unable-to-save-widget-error": "Imposible guardar widget! Tiene errores!",
+ "save": "Guardar widget",
+ "saveAs": "Guardar widget como",
+ "save-widget-type-as": "Guardar tipo de widget como",
+ "save-widget-type-as-text": "Por favor, ingrese un nuevo titulo y/o seleccione un paquete de destino.",
+ "toggle-fullscreen": "Cambiar a pantalla completa",
+ "run": "Correr widget",
+ "title": "Titulo",
+ "title-required": "Titulo requerido.",
+ "type": "Tipo",
+ "resources": "Recursos",
+ "resource-url": "JavaScript/CSS URL",
+ "remove-resource": "Eliminar recurso",
+ "add-resource": "Agregar recurso",
+ "html": "HTML",
+ "tidy": "Tidy",
+ "css": "CSS",
+ "settings-schema": "Esquema de configuración",
+ "datakey-settings-schema": "Esquema de configuración de clave de datos",
+ "javascript": "Javascript",
+ "remove-widget-type-title": "¿Estás seguro que quieres eliminar el tipo del widget '{{widgetName}}'?",
+ "remove-widget-type-text": "Luego de confirmar el tipo será eliminado y la información relacionada será irrecuperable.",
+ "remove-widget-type": "Eliminar tipo de widget.",
+ "add-widget-type": "Agregar nuevo tipo de widget",
+ "widget-type-load-failed-error": "Error al cargar el tipo de widget!",
+ "widget-template-load-failed-error": "Error al cargar el template del widget!",
+ "add": "Agregar Widget",
+ "undo": "Deshacer cambios",
+ "export": "Exportar widget"
+ },
+ "widgets-bundle": {
+ "current": "Paquete actual",
+ "widgets-bundles": "Paquete de Widgets",
+ "add": "Agregar paquete de widgets",
+ "delete": "Eliminar paquete de widgets",
+ "title": "Título",
+ "title-required": "Título requerido.",
+ "add-widgets-bundle-text": "Agregar nuevo paquete de widgets",
+ "no-widgets-bundles-text": "Ningún paquete de widgets encontrado",
+ "empty": "Paquete de widgets vacío.",
+ "details": "Detalles",
+ "widgets-bundle-details": "Detalles del paquete de Widgets",
+ "delete-widgets-bundle-title": "¿Estás seguro que desea eliminar el paquete de widgets '{{widgetsBundleTitle}}'?",
+ "delete-widgets-bundle-text": "Ten cuidado, luego de confirmar todos los paquetes seleccionados serán eliminados y su información relacionada será irrecuperable.",
+ "delete-widgets-bundles-title": "¿Estás seguro que deseas eliminar { count, select, 1 {1 paquete de widgets} other {# paquetes de widgets} }?",
+ "delete-widgets-bundles-action-title": "Eliminar { count, select, 1 {1 paquete de widgets} other {# paquetes de widgets} }",
+ "delete-widgets-bundles-text": "Ten cuidado, luego de confirmar todos los paquetes seleccionados serán eliminados y la información relacionada será irrecuperable.",
+ "no-widgets-bundles-matching": "Ningún paquete '{{widgetsBundle}}' encontrado.",
+ "widgets-bundle-required": "Paquete de widget requerido.",
+ "system": "Sistema",
+ "import": "Importar paquete de widgets",
+ "export": "Exportar paquete de widgets",
+ "export-failed-error": "Imposible exportar paquete de widgets: {{error}}",
+ "create-new-widgets-bundle": "Crear nuevo paquete de widgets",
+ "widgets-bundle-file": "Archivo de paquete de widgets",
+ "invalid-widgets-bundle-file-error": "Imposible importar paquete de widgets: Estructura de datos inválida."
+ },
+ "widget-config": {
+ "data": "Datos",
+ "settings": "Ajustes",
+ "advanced": "Avanzado",
+ "title": "Titulo",
+ "general-settings": "Ajustes generales",
+ "display-title": "Mostrar titulo",
+ "drop-shadow": "Sombra",
+ "enable-fullscreen": "Habilitar pantalla completa",
+ "background-color": "Color de fondo",
+ "text-color": "Color del texto",
+ "padding": "Relleno",
+ "title-style": "Estilo de título",
+ "mobile-mode-settings": "Ajustes mobile.",
+ "order": "Orden",
+ "height": "Altura",
+ "units": "Caracter especial a mostrar en el siguiente valor",
+ "decimals": "Números de dígitos después de la coma",
+ "timewindow": "Ventana de tiempo",
+ "use-dashboard-timewindow": "Usar ventana de tiempo del Panel",
+ "display-legend": "Mostrar leyenda",
+ "datasources": "Set de datos",
+ "datasource-type": "Tipo",
+ "datasource-parameters": "Parámetros",
+ "remove-datasource": "Eliminar set de datos",
+ "add-datasource": "Agregar set de datos",
+ "target-device": "Dispositivo destino"
+ },
+ "widget-type": {
+ "import": "Importar tipo de widget",
+ "export": "Exportar tipo de widget",
+ "export-failed-error": "Imposible exportar tipo de widget: {{error}}",
+ "create-new-widget-type": "Crear nuevo tipo de widget",
+ "widget-type-file": "Tipo de archivo del widget",
+ "invalid-widget-type-file-error": "Imposible de importar tipo de widget: Estructura de datos inválida."
+ },
+ "language": {
+ "language": "Lenguaje",
+ "en_US": "Inglés",
+ "ko_KR": "Coreano",
+ "zh_CN": "Chino",
+ "ru_RU": "Ruso",
+ "es_ES": "Español"
+ }
+ };
+ angular.extend(locales, {'es_ES': es_ES});
+}
\ No newline at end of file
diff --git a/ui/src/app/locale/locale.constant-ko.js b/ui/src/app/locale/locale.constant-ko.js
index cda7d9a..8b2d4ba 100644
--- a/ui/src/app/locale/locale.constant-ko.js
+++ b/ui/src/app/locale/locale.constant-ko.js
@@ -777,7 +777,8 @@ export default function addLocaleKorean(locales) {
"en_US": "영어",
"ko_KR": "한글",
"zh_CN": "중국어",
- "ru_RU": "러시아어"
+ "ru_RU": "러시아어",
+ "es_ES": "스페인어"
}
};
angular.extend(locales, {'ko_KR': ko_KR});
diff --git a/ui/src/app/locale/locale.constant-ru.js b/ui/src/app/locale/locale.constant-ru.js
index 15f1068..47c9460 100644
--- a/ui/src/app/locale/locale.constant-ru.js
+++ b/ui/src/app/locale/locale.constant-ru.js
@@ -810,7 +810,9 @@ export default function addLocaleRussian(locales) {
"en_US": "Английский",
"ko_KR": "Корейский",
"zh_CN": "Китайский",
- "ru_RU": "Русский"
+ "ru_RU": "Русский",
+ "es_ES": "испанский"
+
}
};
angular.extend(locales, {'ru_RU': ru_RU});
diff --git a/ui/src/app/locale/locale.constant-zh.js b/ui/src/app/locale/locale.constant-zh.js
index af4b833..56e4d57 100644
--- a/ui/src/app/locale/locale.constant-zh.js
+++ b/ui/src/app/locale/locale.constant-zh.js
@@ -810,7 +810,8 @@ export default function addLocaleChinese(locales) {
"en_US" : "英语",
"ko_KR" : "韩语",
"zh_CN" : "汉语",
- "ru_RU" : "俄语"
+ "ru_RU" : "俄语",
+ "es_ES": "西班牙語"
}
};
angular.extend(locales, {
diff --git a/ui/src/app/profile/profile.controller.js b/ui/src/app/profile/profile.controller.js
index 4377966..cea51be 100644
--- a/ui/src/app/profile/profile.controller.js
+++ b/ui/src/app/profile/profile.controller.js
@@ -31,7 +31,8 @@ export default function ProfileController(userService, $scope, $document, $mdDia
en_US: {value : "en_US", name: "language.en_US"},
ko_KR: {value : "ko_KR", name: "language.ko_KR"},
zh_CN: {value : "zh_CN", name: "language.zh_CN"},
- ru_RU: {value : "ru_RU", name: "language.ru_RU"}
+ ru_RU: {value : "ru_RU", name: "language.ru_RU"}ñ
+ es_ES: {value : "es_ES", name: "language.es_ES"},
};
loadProfile();