Commit 9495c29d1b81188e3c07e4664a70283f699fe761

Authored by Andrew Shvayka
Committed by GitHub
2 parents 4665e25a eef215be

Merge pull request #138 from toti1212/add-spanish-language

Added Spanish language
... ... @@ -18,6 +18,7 @@ import UrlHandler from './url.handler';
18 18 import addLocaleKorean from './locale/locale.constant-ko';
19 19 import addLocaleChinese from './locale/locale.constant-zh';
20 20 import addLocaleRussian from './locale/locale.constant-ru';
  21 +import addLocaleSpanish from './locale/locale.constant-es';
21 22
22 23 /* eslint-disable import/no-unresolved, import/default */
23 24
... ... @@ -54,6 +55,7 @@ export default function AppConfig($provide,
54 55 addLocaleKorean(locales);
55 56 addLocaleChinese(locales);
56 57 addLocaleRussian(locales);
  58 + addLocaleSpanish(locales);
57 59
58 60 var $window = angular.injector(['ng']).get('$window');
59 61 var lang = $window.navigator.language || $window.navigator.userLanguage;
... ... @@ -63,6 +65,9 @@ export default function AppConfig($provide,
63 65 } else if (lang === 'zh') {
64 66 $translateProvider.useSanitizeValueStrategy(null);
65 67 $translateProvider.preferredLanguage('zh_CN');
  68 + } else if (lang === 'es') {
  69 + $translateProvider.useSanitizeValueStrategy(null);
  70 + $translateProvider.preferredLanguage('es_ES');
66 71 }
67 72
68 73 for (var langKey in locales) {
... ...
... ... @@ -36,7 +36,7 @@ export default function AppRun($rootScope, $window, $injector, $location, $log,
36 36 }
37 37
38 38 initWatchers();
39   -
  39 +
40 40 function initWatchers() {
41 41 $rootScope.unauthenticatedHandle = $rootScope.$on('unauthenticated', function (event, doLogout) {
42 42 if (doLogout) {
... ...
  1 +/*
  2 + * Copyright © 2016-2017 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 +
  17 + export default function addLocaleSpanish(locales) {
  18 + var es_ES = {
  19 + "access": {
  20 + "unauthorized": "No autorizado",
  21 + "unauthorized-access": "Acceso no autorizado",
  22 + "unauthorized-access-text": "Debes iniciar sesión para tener acceso a este recurso!",
  23 + "access-forbidden": "Acceso Prohibido",
  24 + "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.",
  25 + "refresh-token-expired": "La sesión ha expirado",
  26 + "refresh-token-failed": "No se puede actualizar la sesión"
  27 + },
  28 + "action": {
  29 + "activate": "Activar",
  30 + "suspend": "Suspender",
  31 + "save": "Guardar",
  32 + "saveAs": "Guardar como",
  33 + "cancel": "Cancelar",
  34 + "ok": "OK",
  35 + "delete": "Borrar",
  36 + "add": "Agregar",
  37 + "yes": "Si",
  38 + "no": "No",
  39 + "update": "Actualizar",
  40 + "remove": "Eliminar",
  41 + "search": "Buscar",
  42 + "assign": "Asignar",
  43 + "unassign": "Cancelar asignación",
  44 + "share": "Compartir",
  45 + "make-private": "Hacer privado",
  46 + "apply": "Aplicar",
  47 + "apply-changes": "Aplicar cambios",
  48 + "edit-mode": "Modo Edición",
  49 + "enter-edit-mode": "Modo Edición",
  50 + "decline-changes": "Descartar cambios",
  51 + "close": "Cerrar",
  52 + "back": "Atrás",
  53 + "run": "Correr",
  54 + "sign-in": "Regístrate!",
  55 + "edit": "Editar",
  56 + "view": "Ver",
  57 + "create": "Crear",
  58 + "drag": "Arrastrar",
  59 + "refresh": "Refrescar",
  60 + "undo": "Deshacer",
  61 + "copy": "Copiar",
  62 + "paste": "Pegar",
  63 + "import": "Importar",
  64 + "export": "Exportar",
  65 + "share-via": "Compartir vía {{provider}}"
  66 + },
  67 + "aggregation": {
  68 + "aggregation": "Agregación",
  69 + "function": "Función de Agregación",
  70 + "limit": "Valores Max",
  71 + "group-interval": "Intervalo de agrupación",
  72 + "min": "Min",
  73 + "max": "Max",
  74 + "avg": "Promedio",
  75 + "sum": "Suma",
  76 + "count": "Cuenta",
  77 + "none": "Ninguno"
  78 + },
  79 + "admin": {
  80 + "general": "General",
  81 + "general-settings": "Ajustes General",
  82 + "outgoing-mail": "Mail de Salida",
  83 + "outgoing-mail-settings": "Ajustes del Mail de Salida",
  84 + "system-settings": "Sistema",
  85 + "test-mail-sent": "Mail de prueba enviado correctamente!",
  86 + "base-url": "URL Base",
  87 + "base-url-required": "URL Base requerida.",
  88 + "mail-from": "Mail Desde",
  89 + "mail-from-required": "Mail Desde requerido.",
  90 + "smtp-protocol": "Protocolo SMTP",
  91 + "smtp-host": "Host SMTP",
  92 + "smtp-host-required": "Host SMTP requerido.",
  93 + "smtp-port": "Puerto SMTP",
  94 + "smtp-port-required": "Debe ingresar un Puerto SMTP.",
  95 + "smtp-port-invalid": "No parece un Puerto SMTP valido.",
  96 + "timeout-msec": "Timeout (ms)",
  97 + "timeout-required": "Timeout requerido.",
  98 + "timeout-invalid": "No parece un Timeout valido.",
  99 + "enable-tls": "Habilitar TLS",
  100 + "send-test-mail": "Enviar mail de prueba"
  101 + },
  102 + "attribute": {
  103 + "attributes": "Atributos",
  104 + "latest-telemetry": "Última telemetría",
  105 + "attributes-scope": "Alcance de los atributos del dispositivo",
  106 + "scope-latest-telemetry": "Última telemetría",
  107 + "scope-client": "Atributos del Cliente",
  108 + "scope-server": "Atributos del Servidor",
  109 + "scope-shared": "Atributos Compartidos",
  110 + "add": "Agregar atributo",
  111 + "key": "Clave",
  112 + "key-required": "Clave del atributo requerida.",
  113 + "value": "Valor",
  114 + "value-required": "Valor del atributo requerido.",
  115 + "delete-attributes-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 atributo} other {# atributos} }?",
  116 + "delete-attributes-text": "Ten cuidado, luego de confirmar el atributo será eliminado, y la información relacionada será irrecuperable.",
  117 + "delete-attributes": "Borrar atributo",
  118 + "enter-attribute-value": "Ingresar valor del atributo",
  119 + "show-on-widget": "Mostrar en Widget",
  120 + "widget-mode": "Widget",
  121 + "next-widget": "Widget siguiente",
  122 + "prev-widget": "Widget anterior",
  123 + "add-to-dashboard": "Agregar al Panel",
  124 + "add-widget-to-dashboard": "Agregar widget al Panel",
  125 + "selected-attributes": "{ count, select, 1 {1 atributo} other {# atributos} } seleccionados",
  126 + "selected-telemetry": "{ count, select, 1 {1 unidad de telemetría } other {# unidades de telemetría} } seleccionadas."
  127 + },
  128 + "confirm-on-exit": {
  129 + "message": "Tienes cambios sin guardar. ¿Estás seguro que quieres abandonar la página?",
  130 + "html-message": "Tienes cambios sin guardar.<br/>¿Estás seguro que quieres abandonar la página?",
  131 + "title": "Cambios sin guardar"
  132 + },
  133 + "contact": {
  134 + "country": "País",
  135 + "city": "Ciudad",
  136 + "state": "Estado/Provincia",
  137 + "postal-code": "Código Postal",
  138 + "postal-code-invalid": "Solo se permiten dígitos.",
  139 + "address": "Dirección",
  140 + "address2": "Dirección 2",
  141 + "phone": "Teléfono",
  142 + "email": "Email",
  143 + "no-address": "Sin Dirección"
  144 + },
  145 + "common": {
  146 + "username": "Usuario",
  147 + "password": "Contraseña",
  148 + "enter-username": "Ingresa el nombre de usuario.",
  149 + "enter-password": "Ingresa la contraseña",
  150 + "enter-search": "Ingresa búsqueda"
  151 + },
  152 + "customer": {
  153 + "customers": "Clientes",
  154 + "management": "Gestión de Clientes",
  155 + "dashboard": "Panel del Cliente",
  156 + "dashboards": "Paneles del Cliente",
  157 + "devices": "Panel del Cliente",
  158 + "public-dashboards": "Paneles Públicos",
  159 + "public-devices": "Dispositivos Públicos",
  160 + "add": "Agregar cliente",
  161 + "delete": "Borrar cliente",
  162 + "manage-customer-users": "Gestionar usuarios del cliente",
  163 + "manage-customer-devices": "Gestionar dispositivos del cliente",
  164 + "manage-customer-dashboards": "Gestionar paneles del cliente",
  165 + "manage-public-devices": "Gestionar dispositivos públicos",
  166 + "manage-public-dashboards": "Gestionar paneles públicos",
  167 + "add-customer-text": "Agregar nuevo cliente",
  168 + "no-customers-text": "No se encontrar clientes",
  169 + "customer-details": "Detalles del cliente",
  170 + "delete-customer-title": "¿Estás seguro que quieres eliminar el cliente '{{customerTitle}}'?",
  171 + "delete-customer-text": "Ten cuidado, luego de confirmar el cliente será eliminado y toda la información relacionada será irrecuperable.",
  172 + "delete-customers-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 cliente} other {# clientes} }?",
  173 + "delete-customers-action-title": "Borrar { count, select, 1 {1 cliente} other {# clientes} }",
  174 + "delete-customers-text": "Ten cuidado, luego de confirmar todos los clientes seleccionados serán eliminados y su información relacionada será irrecuperable.",
  175 + "manage-users": "Gestionar usuarios",
  176 + "manage-devices": "Gestionar dispositivos",
  177 + "manage-dashboards": "Gestionar paneles",
  178 + "title": "Título",
  179 + "title-required": "Título requerido.",
  180 + "description": "Descripción"
  181 + },
  182 + "datetime": {
  183 + "date-from": "Fecha desde",
  184 + "time-from": "Tiempo desde",
  185 + "date-to": "Fecha hasta",
  186 + "time-to": "Tiempo hasta"
  187 + },
  188 + "dashboard": {
  189 + "dashboard": "Panel",
  190 + "dashboards": "Paneles",
  191 + "management": "Gestión de Paneles",
  192 + "view-dashboards": "Ver paneles",
  193 + "add": "Agregar Panel",
  194 + "assign-dashboard-to-customer": "Asignar panel(es) a cliente",
  195 + "assign-dashboard-to-customer-text": "Por favor, seleccione algún panel para asignar al Cliente.",
  196 + "assign-to-customer-text": "Por favor, seleccione algún cliente para asignar al(los) panel(es).",
  197 + "assign-to-customer": "Asignar a cliente",
  198 + "unassign-from-customer": "Desasignar del cliente",
  199 + "make-public": "Hacer panel público",
  200 + "make-private": "Hacer panel privado",
  201 + "no-dashboards-text": "Ningún panel encontrado",
  202 + "no-widgets": "Ningún widget configurado",
  203 + "add-widget": "Agregar nuevo widget",
  204 + "title": "Titulo",
  205 + "select-widget-title": "Seleccionar widget",
  206 + "select-widget-subtitle": "Lista de tipos de widgets",
  207 + "delete": "Eliminar panel",
  208 + "title-required": "Título requerido.",
  209 + "description": "Descripción",
  210 + "details": "Detalles",
  211 + "dashboard-details": "Detalles del panel",
  212 + "add-dashboard-text": "Agregar nuevo panel",
  213 + "assign-dashboards": "Asignar paneles",
  214 + "assign-new-dashboard": "Asignar nuevo panel",
  215 + "assign-dashboards-text": "Asignar { count, select, 1 {1 panel} other {# paneles} } al cliente",
  216 + "delete-dashboards": "Eliminar paneles",
  217 + "unassign-dashboards": "Desasignar paneles",
  218 + "unassign-dashboards-action-title": "Desasignar { count, select, 1 {1 paneles} other {# paneles} } del cliente",
  219 + "delete-dashboard-title": "¿Estás seguro que quieres eliminar el panel '{{dashboardTitle}}'?",
  220 + "delete-dashboard-text": "Ten cuidado, el panel seleccionado será eliminado y la información relacionada sera irrecuperable.",
  221 + "delete-dashboards-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 panel} other {# paneles} }?",
  222 + "delete-dashboards-action-title": "Eliminar { count, select, 1 {1 panel} other {# paneles} }",
  223 + "delete-dashboards-text": "Ten cuidado, los paneles seleccionados serán eliminados y la información relacionada será irrecuperable.",
  224 + "unassign-dashboard-title": "¿Estás seguro que quieres desasignar el panel '{{dashboardTitle}}'?",
  225 + "unassign-dashboard-text": "Luego de confirmar, el panel será desasignado y no podrá ser accesible por el cliente.",
  226 + "unassign-dashboard": "Desasignar panel",
  227 + "unassign-dashboards-title": "¿Estás seguro que quieres desasignar { count, select, 1 {1 panel} other {# paneles} }?",
  228 + "unassign-dashboards-text": "Luego de confirmar, los paneles seleccionados serán desasignados y no podrán ser accesibles por el cliente.",
  229 + "public-dashboard-title": "El panel ahora es público",
  230 + "public-dashboard-text": "Tu panel <b>{{dashboardTitle}}</b> es ahora público y podrá ser accedido desde: <a href='{{publicLink}}' target='_blank'>aquí</a>:",
  231 + "public-dashboard-notice": "<b>Nota:</b> No olvides hacer públicos los dispositivos relacionados para acceder a sus datos.",
  232 + "make-private-dashboard-title": "¿Estás seguro que quieres hacer el panel '{{dashboardTitle}}' privado?",
  233 + "make-private-dashboard-text": "Luego de confirmar, el panel será privado y no podrá ser accesible por otros.",
  234 + "make-private-dashboard": "Hacer panel privado",
  235 + "socialshare-text": "'{{dashboardTitle}}' powered by ThingsBoard",
  236 + "socialshare-title": "'{{dashboardTitle}}' powered by ThingsBoard",
  237 + "select-dashboard": "Seleccionar panel",
  238 + "no-dashboards-matching": "Panel '{{dashboard}}' no encontrado.",
  239 + "dashboard-required": "Panel requerido.",
  240 + "select-existing": "Seleccionar paneles existentes",
  241 + "create-new": "Crear nuevo panel",
  242 + "new-dashboard-title": "Nuevo título",
  243 + "open-dashboard": "Abrir panel",
  244 + "set-background": "Definir fondo",
  245 + "background-color": "Color de fondo",
  246 + "background-image": "Imagen de fondo",
  247 + "background-size-mode": "Modo tamaño de fondo",
  248 + "no-image": "No se ha seleccionado ningúna imagen",
  249 + "drop-image": "Suelte una imagen o haga clic para seleccionar un archivo para cargar.",
  250 + "settings": "Ajustes",
  251 + "columns-count": "Número de columnas",
  252 + "columns-count-required": "Número de columnas requerido.",
  253 + "min-columns-count-message": "Solo se permite un número mínimo de 10 columnas.",
  254 + "max-columns-count-message": "Solo se permite un número máximo de 1000 columnas.",
  255 + "widgets-margins": "Margen entre widgets",
  256 + "horizontal-margin": "Margen horizontal",
  257 + "horizontal-margin-required": "Margen horizontal requerido.",
  258 + "min-horizontal-margin-message": "Solo se permite margen horizontal mínimo de 0.",
  259 + "max-horizontal-margin-message": "Solo se permite margen horizontal máximo de 50.",
  260 + "vertical-margin": "Margen vertical",
  261 + "vertical-margin-required": "Margen vertical requerido.",
  262 + "min-vertical-margin-message": "Solo se permite margen vertical mínimo de 0.",
  263 + "max-vertical-margin-message": "Solo se permite margen vertical máximo de 50.",
  264 + "display-title": "Mostrar título del panel",
  265 + "title-color": "Color del título",
  266 + "display-device-selection": "Mostrar selección de dispositivo",
  267 + "display-dashboard-timewindow": "Mostrar ventana de tiempo",
  268 + "display-dashboard-export": "Mostrar exportar",
  269 + "import": "Importar panel",
  270 + "export": "Exportar panel",
  271 + "export-failed-error": "Imposible exportar panel: {{error}}",
  272 + "create-new-dashboard": "Crear nuevo panel",
  273 + "dashboard-file": "Archivo del panel",
  274 + "invalid-dashboard-file-error": "Imposible importar panel: Estructura de datos inválida.",
  275 + "dashboard-import-missing-aliases-title": "Configurar alias utilizados por el panel importado",
  276 + "create-new-widget": "Crear nuevo widget",
  277 + "import-widget": "Importar widget",
  278 + "widget-file": "Archivo de widget",
  279 + "invalid-widget-file-error": "Imposible importar widget: Estructura de datos inválida.",
  280 + "widget-import-missing-aliases-title": "Configurar alias utilizados por el widget",
  281 + "open-toolbar": "Abrir toolbar del panel",
  282 + "close-toolbar": "Cerrar toolbar",
  283 + "configuration-error": "Error de configuración",
  284 + "alias-resolution-error-title": "Error de configuración de alias del panel",
  285 + "invalid-aliases-config": "No se puede encontrar ningún dispositivo que coincida con algunos de los alias de filtro.<br/>" +
  286 + "Póngase en contacto con su administrador para resolver este problema.",
  287 + "select-devices": "Seleccionar dispositivos",
  288 + "assignedToCustomer": "Asignado al cliente",
  289 + "public": "Público",
  290 + "public-link": "Link público",
  291 + "copy-public-link": "Copiar link público",
  292 + "public-link-copied-message": "El link público del panel se ha copiado al portapapeles"
  293 + },
  294 + "datakey": {
  295 + "settings": "Ajustes",
  296 + "advanced": "Avanzado",
  297 + "label": "Etiqueta",
  298 + "color": "Color",
  299 + "data-generation-func": "Función de generación de datos",
  300 + "use-data-post-processing-func": "Usar funcíon de post-procesamiendo de datos",
  301 + "configuration": "Ajustes de clave de datos",
  302 + "timeseries": "Serie de tiempos",
  303 + "attributes": "Atributos",
  304 + "timeseries-required": "Series de tiempo del dispositivo requerido.",
  305 + "timeseries-or-attributes-required": "Series de tiempo/Atributos requeridos.",
  306 + "function-types": "Tipos de funciones",
  307 + "function-types-required": "Tipos de funciones requerido."
  308 + },
  309 + "datasource": {
  310 + "type": "Típo de fuente de datos",
  311 + "add-datasource-prompt": "Por favor, agrega una fuente de datos"
  312 + },
  313 + "details": {
  314 + "edit-mode": "Modo Edición",
  315 + "toggle-edit-mode": "Ir a Modo Edición"
  316 + },
  317 + "device": {
  318 + "device": "Dispositivo",
  319 + "device-required": "Dispositivo requerido.",
  320 + "devices": "Dispositivos",
  321 + "management": "Gestión de Dispositivos",
  322 + "view-devices": "Ver dispositivos",
  323 + "device-alias": "Alias de dispositivo",
  324 + "aliases": "Alias de dispositivos",
  325 + "no-alias-matching": "'{{alias}}' no encontrado.",
  326 + "no-aliases-found": "Ningún alias encontrado.",
  327 + "no-key-matching": "'{{key}}' no encontrado.",
  328 + "no-keys-found": "Ninguna clave encontrada.",
  329 + "create-new-alias": "Crear nuevo alias!",
  330 + "create-new-key": "Crear nueva clave!",
  331 + "duplicate-alias-error": "Alias duplicado '{{alias}}'.<br> El alias de los dispositivos deben ser únicos dentro del panel.",
  332 + "configure-alias": "Configurar alias '{{alias}}'",
  333 + "no-devices-matching": "No se encontró dispositivo '{{device}}'",
  334 + "alias": "Alias",
  335 + "alias-required": "Alias de dispositivo requerido.",
  336 + "remove-alias": "Eliminar alias",
  337 + "add-alias": "Agregar alias",
  338 + "name-starts-with": "Nombre empieza con",
  339 + "device-list": "Lista de dispositivos",
  340 + "use-device-name-filter": "Usar filtro",
  341 + "device-list-empty": "Ningún dispositivo seleccionado.",
  342 + "device-name-filter-required": "Nombre de filtro requerido.",
  343 + "device-name-filter-no-device-matched": "Ningún dispositivo encontrado que comience con '{{device}}'.",
  344 + "add": "Agregar dispositivo",
  345 + "assign-to-customer": "Asignar a cliente",
  346 + "assign-device-to-customer": "Asignar dispositivo(s) a Cliente",
  347 + "assign-device-to-customer-text": "Por favor, seleccione los dispositivos que serán asignados al cliente",
  348 + "make-public": "Hacer dispositivo público",
  349 + "make-private": "Hacer dispositivo privado",
  350 + "no-devices-text": "Ningún dispositivo encontrado",
  351 + "assign-to-customer-text": "Por favor, seleccione el cliente para asignar el(los) dispositivo(s)",
  352 + "device-details": "Detalles del dispositivo",
  353 + "add-device-text": "Agregar nuevo dispositivo",
  354 + "credentials": "Credenciales",
  355 + "manage-credentials": "Gestionar credenciales",
  356 + "delete": "Eliminar dispositivo",
  357 + "assign-devices": "Asignar dispositivo",
  358 + "assign-devices-text": "Asignar { count, select, 1 {1 dispositivo} other {# dispositivos} } al cliente",
  359 + "delete-devices": "Eliminar dispositivo",
  360 + "unassign-from-customer": "Desasignar del cliente",
  361 + "unassign-devices": "Desasignar dispositivos",
  362 + "unassign-devices-action-title": "Desasignar { count, select, 1 {1 dispositivo} other {# dispositivos} } del cliente",
  363 + "assign-new-device": "Asignar nuevo dispositivo",
  364 + "make-public-device-title": "¿Estás seguro que quieres hacer el dispositivo '{{deviceName}}' público?",
  365 + "make-public-device-text": "Luego de confirmar, el dispositivo y la información relacionada serán públicos y podrá ser accesible por otros.",
  366 + "make-private-device-title": "¿Estás seguro que quieres hacer el dispositivo '{{deviceName}}' privado?",
  367 + "make-private-device-text": "Luego de confirmar, el dispositivo y la información relacionada serán privados y no podrá ser accesible por otros.",
  368 + "view-credentials": "Ver credenciales",
  369 + "delete-device-title": "¿Estás seguro que quieres eliminar el dispositivo '{{deviceName}}'?",
  370 + "delete-device-text": "Ten cuidado, luego de confirmar los dispositivos serán eliminados y la información relacionada será irrecuperable.",
  371 + "delete-devices-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 dispositivo} other {# dispositivos} }?",
  372 + "delete-devices-action-title": "Eliminar { count, select, 1 {1 dispositivo} other {# dispositivos} }",
  373 + "delete-devices-text": "Ten cuidado, luego de confirmar los dispositivos seleccionados serán eliminados y la información relacionada será irrecuperable.",
  374 + "unassign-device-title": "¿Estás seguro que quieres desasignar el dispositivo '{{deviceName}}'?",
  375 + "unassign-device-text": "Luego de confirmar el dispositivo será desasignado y no podrá ser accesible por el cliente.",
  376 + "unassign-device": "Desasignar dispositivo",
  377 + "unassign-devices-title": "¿Estás seguro que quieres desasignar { count, select, 1 {1 dispositivo} other {# dispositivos} }?",
  378 + "unassign-devices-text": "Luego de confirmar los dispositivos seleccionados serán desasignados y no podrán ser accedidos por el cliente.",
  379 + "device-credentials": "Credenciales del dispositivo",
  380 + "credentials-type": "Tipo de credencial",
  381 + "access-token": "Access token",
  382 + "access-token-required": "Access token requerido.",
  383 + "access-token-invalid": "Access token debe tener entre 1 a 20 caracteres.",
  384 + "rsa-key": "Clave pública RSA",
  385 + "rsa-key-required": "Clave pública RSA requerida.",
  386 + "secret": "Secreta",
  387 + "secret-required": "Secreta requerida.",
  388 + "name": "Nombre",
  389 + "name-required": "Nombre requerido.",
  390 + "description": "Descripción",
  391 + "events": "Eventos",
  392 + "details": "Detalles",
  393 + "copyId": "Copiar ID",
  394 + "copyAccessToken": "Copiar access token",
  395 + "idCopiedMessage": "Id del dispositivo copiado al portapapeles",
  396 + "accessTokenCopiedMessage": "Access token del dispositivo copiado al portapapeles",
  397 + "assignedToCustomer": "Asignado al cliente",
  398 + "unable-delete-device-alias-title": "Imposible eliminar alias del dispositivo",
  399 + "unable-delete-device-alias-text": "Alias '{{deviceAlias}}' no puede ser eliminado. Esta siendo usado por el(los) widget(s):<br/>{{widgetsList}}",
  400 + "is-gateway": "Es gateway",
  401 + "public": "Público",
  402 + "device-public": "Dispositivo público"
  403 + },
  404 + "dialog": {
  405 + "close": "Cerrar cuadro de diálogo"
  406 + },
  407 + "error": {
  408 + "unable-to-connect": "Imposible conectar con el servidor! Por favor, revise su conexión a internet.",
  409 + "unhandled-error-code": "Código de error no manejado: {{errorCode}}",
  410 + "unknown-error": "Error desconocido"
  411 + },
  412 + "event": {
  413 + "event-type": "Tipo de evento",
  414 + "type-alarm": "Alarma",
  415 + "type-error": "Error",
  416 + "type-lc-event": "Ciclo de vida",
  417 + "type-stats": "Estadísticas",
  418 + "no-events-prompt": "Ningún evento encontrado.",
  419 + "error": "Error",
  420 + "alarm": "Alarma",
  421 + "event-time": "Hora del evento",
  422 + "server": "Servidor",
  423 + "body": "Cuerpo",
  424 + "method": "Método",
  425 + "event": "Evento",
  426 + "status": "Status",
  427 + "success": "Éxito",
  428 + "failed": "Fallo",
  429 + "messages-processed": "Mensajes procesados",
  430 + "errors-occurred": "Ocurrieron errores"
  431 + },
  432 + "fullscreen": {
  433 + "expand": "Expandir a Pantalla Completa",
  434 + "exit": "Salir de Pantalla Completa",
  435 + "toggle": "Cambiar el modo de Pantalla Completa",
  436 + "fullscreen": "Pantalla Completa"
  437 + },
  438 + "function": {
  439 + "function": "Función"
  440 + },
  441 + "grid": {
  442 + "delete-item-title": "¿Estás seguro que quieres eliminar este item?",
  443 + "delete-item-text": "Ten cuidado, luego de confirmar el item será eliminado y la información relacionada será irrecuperable.",
  444 + "delete-items-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 item} other {# items} }?",
  445 + "delete-items-action-title": "Eliminar { count, select, 1 {1 item} other {# items} }",
  446 + "delete-items-text": "Ten cuidado, luego de confirmar los items seleccionados serán eliminados y la información relacionada será irrecuperable.",
  447 + "add-item-text": "Agregar nuevo item",
  448 + "no-items-text": "Ningún item encontrado",
  449 + "item-details": "Detalles del item",
  450 + "delete-item": "Borrar Item",
  451 + "delete-items": "Borrar Items",
  452 + "scroll-to-top": "Ir hacia arriba"
  453 + },
  454 + "help": {
  455 + "goto-help-page": "Ir a Página de Ayuda"
  456 + },
  457 + "home": {
  458 + "home": "Principal",
  459 + "profile": "Perfil",
  460 + "logout": "Salir",
  461 + "menu": "Menu",
  462 + "avatar": "Avatar",
  463 + "open-user-menu": "Abrir menú de usuario"
  464 + },
  465 + "import": {
  466 + "no-file": "Ningún archivo seleccionado",
  467 + "drop-file": "Arrastra un archivo JSON o clickea para seleccionar uno."
  468 + },
  469 + "item": {
  470 + "selected": "Seleccionado"
  471 + },
  472 + "js-func": {
  473 + "no-return-error": "La función debe retornar un valor!",
  474 + "return-type-mismatch": "La función debe retornar un valor de tipo: '{{type}}'!"
  475 + },
  476 + "legend": {
  477 + "position": "Posición de leyenda",
  478 + "show-max": "Mostrar máximo",
  479 + "show-min": "Mostrar mínimo",
  480 + "show-avg": "Mostrar promedio",
  481 + "show-total": "Mostrar total",
  482 + "settings": "Ajustes de leyenda.",
  483 + "min": "min",
  484 + "max": "max",
  485 + "avg": "prom",
  486 + "total": "total"
  487 + },
  488 + "login": {
  489 + "login": "Ingresar",
  490 + "request-password-reset": "Pedir restablecer contraseña",
  491 + "reset-password": "Restablecer contraseña",
  492 + "create-password": "Crear contraseña",
  493 + "passwords-mismatch-error": "Las contraseñas deben ser las mismas!",
  494 + "password-again": "Reingresa la contraseña",
  495 + "sign-in": "Iniciar sesión",
  496 + "username": "Usuario (email)",
  497 + "remember-me": "Recordar",
  498 + "forgot-password": "¿Olvidaste tu contraseña?",
  499 + "password-reset": "Restablecer Contraseña",
  500 + "new-password": "Nueva contraseña",
  501 + "new-password-again": "Repita la nueva contraseña",
  502 + "password-link-sent-message": "Se ha enviado el enlace de restablecimiento de contraseña con éxito!",
  503 + "email": "Email"
  504 + },
  505 + "plugin": {
  506 + "plugins": "Plugins",
  507 + "delete": "Eliminar plugin",
  508 + "activate": "Activar plugin",
  509 + "suspend": "Suspender plugin",
  510 + "active": "Activo",
  511 + "suspended": "Suspendido",
  512 + "name": "Nombre",
  513 + "name-required": "Nombre requerido.",
  514 + "description": "Descripción",
  515 + "add": "Agregar Plugin",
  516 + "delete-plugin-title": "¿Estás seguro que quieres eliminar el plugin '{{pluginName}}'?",
  517 + "delete-plugin-text": "Ten cuidado, luego de confirmar el plugin será eliminado y la información relacionada será irrecuperable.",
  518 + "delete-plugins-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 plugin} other {# plugins} }?",
  519 + "delete-plugins-action-title": "Eliminar { count, select, 1 {1 plugin} other {# plugins} }",
  520 + "delete-plugins-text": "Ten cuidado, luego de confirmar todos los plugins seleccionados serán eliminados y la información relacionada será irrecuperable.",
  521 + "add-plugin-text": "Agregar nuevo plugin",
  522 + "no-plugins-text": "Ningún plugin encontrado",
  523 + "plugin-details": "Detalles",
  524 + "api-token": "API token",
  525 + "api-token-required": "API token requerido.",
  526 + "type": "Tipo del plugin",
  527 + "type-required": "Tipo requerido.",
  528 + "configuration": "Ajustes del plugin",
  529 + "system": "Sistema",
  530 + "select-plugin": "plugin",
  531 + "plugin": "Plugin",
  532 + "no-plugins-matching": "No se encontraron plugins: '{{plugin}}'",
  533 + "plugin-required": "Plugin requerido.",
  534 + "plugin-require-match": "Por favor, elija un plugin existente.",
  535 + "events": "Eventos",
  536 + "details": "Detalles",
  537 + "import": "Importar plugin",
  538 + "export": "Exportar plugin",
  539 + "export-failed-error": "Imposible exportar plugin: {{error}}",
  540 + "create-new-plugin": "Crear nuevo plugin",
  541 + "plugin-file": "Archivo",
  542 + "invalid-plugin-file-error": "Imposible de importar plugin: Estructura de datos inválida."
  543 + },
  544 + "position": {
  545 + "top": "Arriba",
  546 + "bottom": "Abajo",
  547 + "left": "Izquierda",
  548 + "right": "Derecha"
  549 + },
  550 + "profile": {
  551 + "profile": "Perfil",
  552 + "change-password": "Cambiar contraseña",
  553 + "current-password": "Contraseña actual"
  554 + },
  555 + "rule": {
  556 + "rules": "Reglas",
  557 + "delete": "Eliminar regla",
  558 + "activate": "Activar regla",
  559 + "suspend": "Suspender regla",
  560 + "active": "Activada",
  561 + "suspended": "Suspendida",
  562 + "name": "Nombre",
  563 + "name-required": "Nombre requerido.",
  564 + "description": "Descripción",
  565 + "add": "Agregar Regla",
  566 + "delete-rule-title": "¿Estás seguro que quieres eliminar la regla '{{ruleName}}'?",
  567 + "delete-rule-text": "Ten cuidado, luego de confirmar la regla será eliminada y la información relacionada será irrecuperable.",
  568 + "delete-rules-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 regla} other {# reglas} }?",
  569 + "delete-rules-action-title": "Eliminar { count, select, 1 {1 regla} other {# reglas} }",
  570 + "delete-rules-text": "Ten cuidado, luego de confirmar todas las reglas seleccionadas serán borradas y la información relacionada será irrecuperable.",
  571 + "add-rule-text": "Agregar nueva regla",
  572 + "no-rules-text": "Ninguna regla encontrada",
  573 + "rule-details": "Detalles",
  574 + "filters": "Filtros",
  575 + "filter": "Filtro",
  576 + "add-filter-prompt": "Por favor, ingresa un filtro",
  577 + "remove-filter": "Eliminar filtro",
  578 + "add-filter": "Agregar filtro",
  579 + "filter-name": "Nombre",
  580 + "filter-type": "Tipo",
  581 + "edit-filter": "Editar filtro",
  582 + "view-filter": "Ver filtro",
  583 + "component-name": "Nombre",
  584 + "component-name-required": "Nombre requerido.",
  585 + "component-type": "Tipo",
  586 + "component-type-required": "Tipo requerido.",
  587 + "processor": "Procesador",
  588 + "no-processor-configured": "Ningún procesador encontrado",
  589 + "create-processor": "Crear procesador",
  590 + "processor-name": "Nombre",
  591 + "processor-type": "Tipo",
  592 + "plugin-action": "Acción del Plugin",
  593 + "action-name": "Nombre",
  594 + "action-type": "Tipo",
  595 + "create-action-prompt": "Por favor, crea una acción.",
  596 + "create-action": "Crear acción",
  597 + "details": "Detalles",
  598 + "events": "Eventos",
  599 + "system": "Sistema",
  600 + "import": "Importar regla",
  601 + "export": "Exportar regla",
  602 + "export-failed-error": "Imposible de exportar regla: {{error}}",
  603 + "create-new-rule": "Crear nueva regla",
  604 + "rule-file": "Archivo",
  605 + "invalid-rule-file-error": "Imposible de importar regla: Estructura de datos inválida."
  606 + },
  607 + "rule-plugin": {
  608 + "management": "Gestión de Reglas y Plugins"
  609 + },
  610 + "tenant": {
  611 + "tenants": "Tenants",
  612 + "management": "Gestión de Tenant",
  613 + "add": "Agregar Tenant",
  614 + "admins": "Admins",
  615 + "manage-tenant-admins": "Gestionar administradores tenant",
  616 + "delete": "Eliminar tenant",
  617 + "add-tenant-text": "Agregar nuevo tenant",
  618 + "no-tenants-text": "Ningún tenant encontrado",
  619 + "tenant-details": "Detalles del Tenant",
  620 + "delete-tenant-title": "¿Estás seguro que quieres eliminar el tenant '{{tenantTitle}}'?",
  621 + "delete-tenant-text": "Ten cuidado, luego de confirmar el tenant será eliminado y la información relacionada será irrecuperable.",
  622 + "delete-tenants-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 tenant} other {# tenants} }?",
  623 + "delete-tenants-action-title": "Eliminar { count, select, 1 {1 tenant} other {# tenants} }",
  624 + "delete-tenants-text": "Ten cuidado, luego de confirmar los tenants seleccionados serán eliminados y la información relacionada será irrecuperable.",
  625 + "title": "Título",
  626 + "title-required": "Título requerido.",
  627 + "description": "Descripción"
  628 + },
  629 + "timeinterval": {
  630 + "seconds-interval": "{ seconds, select, 1 {1 segundo} other {# segundos} }",
  631 + "minutes-interval": "{ minutes, select, 1 {1 minuto} other {# minutos} }",
  632 + "hours-interval": "{ hours, select, 1 {1 hora} other {# horas} }",
  633 + "days-interval": "{ days, select, 1 {1 día} other {# días} }",
  634 + "days": "Días",
  635 + "hours": "Horas",
  636 + "minutes": "Minutos",
  637 + "seconds": "Segundos",
  638 + "advanced": "Avanzado"
  639 + },
  640 + "timewindow": {
  641 + "days": "{ days, select, 1 { día } other {# días } }",
  642 + "hours": "{ hours, select, 0 { horas } 1 {1 hora } other {# horas } }",
  643 + "minutes": "{ minutes, select, 0 { minutos } 1 {1 minuto } other {# minutos } }",
  644 + "seconds": "{ seconds, select, 0 { segundos } 1 {1 segundo } other {# segundos } }",
  645 + "realtime": "Tiempo-real",
  646 + "history": "Histórico",
  647 + "last-prefix": "último",
  648 + "period": "desde {{ startTime }} hasta {{ endTime }}",
  649 + "edit": "Editar ventana de tiempo",
  650 + "date-range": "Rango de fechas",
  651 + "last": "Últimos",
  652 + "time-period": "Período de tiempo"
  653 + },
  654 + "user": {
  655 + "users": "Usuarios",
  656 + "customer-users": "Usuarios del Cliente",
  657 + "tenant-admins": "Tenant Admins",
  658 + "sys-admin": "Administrador del Sistema",
  659 + "tenant-admin": "Administrador Tenant",
  660 + "customer": "Cliente",
  661 + "anonymous": "Anónimo",
  662 + "add": "Agregar usuario",
  663 + "delete": "Eliminar usuario",
  664 + "add-user-text": "Agregar nuevo usuario",
  665 + "no-users-text": "Ningún usuario encontrado",
  666 + "user-details": "Detalles del usuario",
  667 + "delete-user-title": "¿Estás seguro que quieres eliminar el usuario '{{userEmail}}'?",
  668 + "delete-user-text": "Ten cuidado, luego de confirmar el usuario seleccionado será eliminado y la información relacionada será irrecuperable.",
  669 + "delete-users-title": "¿Estás seguro que quieres eliminar { count, select, 1 {1 usuario} other {# usuarios} }?",
  670 + "delete-users-action-title": "Borrar { count, select, 1 {1 usuario} other {# usuarios} }",
  671 + "delete-users-text": "Ten cuidado, luego de confirmar los usuarios seleccionados serán eliminados y la información relacionada será irrecuperable.",
  672 + "activation-email-sent-message": "Mail de activación enviado con éxito!",
  673 + "resend-activation": "Reenviar activación",
  674 + "email": "Email",
  675 + "email-required": "Email requerido.",
  676 + "first-name": "Nombre",
  677 + "last-name": "Apellido",
  678 + "description": "Descripción",
  679 + "default-dashboard": "Panel por defecto",
  680 + "always-fullscreen": "Siempre en pantalla completa"
  681 + },
  682 + "value": {
  683 + "type": "Tipo de valor",
  684 + "string": "Cadena de texto",
  685 + "string-value": "Valor de cadena de texto",
  686 + "integer": "Nro entero",
  687 + "integer-value": "Valor de nro entero",
  688 + "invalid-integer-value": "Valor inválido",
  689 + "double": "Nro decimal",
  690 + "double-value": "Valor nro decimal",
  691 + "boolean": "Booleano",
  692 + "boolean-value": "Valor booleano",
  693 + "false": "Falso",
  694 + "true": "Verdadero"
  695 + },
  696 + "widget": {
  697 + "widget-library": "Bibloteca de Widgets",
  698 + "widget-bundle": "Paquetes de Widgets",
  699 + "select-widgets-bundle": "Seleccionar paquete de widgets",
  700 + "management": "Gestión de Widgets",
  701 + "editor": "Editor de widgets",
  702 + "widget-type-not-found": "Problema al cargar la configuración del widget.<br>Probablemente asociado\n El tipo de widget fue eliminado.",
  703 + "widget-type-load-error": "Widget no pudo ser cargado debido a estos errores:",
  704 + "remove": "Eliminar widget",
  705 + "edit": "Editar widget",
  706 + "remove-widget-title": "¿Estás seguro que quieres eliminar el widget '{{widgetTitle}}'?",
  707 + "remove-widget-text": "Luego de confirmar el widget será eliminado y toda la información relacionada será irrecuperable..",
  708 + "timeseries": "Series de tiempo",
  709 + "latest-values": "Últimos valores",
  710 + "rpc": "Widget de control",
  711 + "static": "Widget estático",
  712 + "select-widget-type": "Seleccionar tipo de widget",
  713 + "missing-widget-title-error": "El titulo del widget debe ser especificado!",
  714 + "widget-saved": "Widget guardado",
  715 + "unable-to-save-widget-error": "Imposible guardar widget! Tiene errores!",
  716 + "save": "Guardar widget",
  717 + "saveAs": "Guardar widget como",
  718 + "save-widget-type-as": "Guardar tipo de widget como",
  719 + "save-widget-type-as-text": "Por favor, ingrese un nuevo titulo y/o seleccione un paquete de destino.",
  720 + "toggle-fullscreen": "Cambiar a pantalla completa",
  721 + "run": "Correr widget",
  722 + "title": "Titulo",
  723 + "title-required": "Titulo requerido.",
  724 + "type": "Tipo",
  725 + "resources": "Recursos",
  726 + "resource-url": "JavaScript/CSS URL",
  727 + "remove-resource": "Eliminar recurso",
  728 + "add-resource": "Agregar recurso",
  729 + "html": "HTML",
  730 + "tidy": "Tidy",
  731 + "css": "CSS",
  732 + "settings-schema": "Esquema de configuración",
  733 + "datakey-settings-schema": "Esquema de configuración de clave de datos",
  734 + "javascript": "Javascript",
  735 + "remove-widget-type-title": "¿Estás seguro que quieres eliminar el tipo del widget '{{widgetName}}'?",
  736 + "remove-widget-type-text": "Luego de confirmar el tipo será eliminado y la información relacionada será irrecuperable.",
  737 + "remove-widget-type": "Eliminar tipo de widget.",
  738 + "add-widget-type": "Agregar nuevo tipo de widget",
  739 + "widget-type-load-failed-error": "Error al cargar el tipo de widget!",
  740 + "widget-template-load-failed-error": "Error al cargar el template del widget!",
  741 + "add": "Agregar Widget",
  742 + "undo": "Deshacer cambios",
  743 + "export": "Exportar widget"
  744 + },
  745 + "widgets-bundle": {
  746 + "current": "Paquete actual",
  747 + "widgets-bundles": "Paquete de Widgets",
  748 + "add": "Agregar paquete de widgets",
  749 + "delete": "Eliminar paquete de widgets",
  750 + "title": "Título",
  751 + "title-required": "Título requerido.",
  752 + "add-widgets-bundle-text": "Agregar nuevo paquete de widgets",
  753 + "no-widgets-bundles-text": "Ningún paquete de widgets encontrado",
  754 + "empty": "Paquete de widgets vacío.",
  755 + "details": "Detalles",
  756 + "widgets-bundle-details": "Detalles del paquete de Widgets",
  757 + "delete-widgets-bundle-title": "¿Estás seguro que desea eliminar el paquete de widgets '{{widgetsBundleTitle}}'?",
  758 + "delete-widgets-bundle-text": "Ten cuidado, luego de confirmar todos los paquetes seleccionados serán eliminados y su información relacionada será irrecuperable.",
  759 + "delete-widgets-bundles-title": "¿Estás seguro que deseas eliminar { count, select, 1 {1 paquete de widgets} other {# paquetes de widgets} }?",
  760 + "delete-widgets-bundles-action-title": "Eliminar { count, select, 1 {1 paquete de widgets} other {# paquetes de widgets} }",
  761 + "delete-widgets-bundles-text": "Ten cuidado, luego de confirmar todos los paquetes seleccionados serán eliminados y la información relacionada será irrecuperable.",
  762 + "no-widgets-bundles-matching": "Ningún paquete '{{widgetsBundle}}' encontrado.",
  763 + "widgets-bundle-required": "Paquete de widget requerido.",
  764 + "system": "Sistema",
  765 + "import": "Importar paquete de widgets",
  766 + "export": "Exportar paquete de widgets",
  767 + "export-failed-error": "Imposible exportar paquete de widgets: {{error}}",
  768 + "create-new-widgets-bundle": "Crear nuevo paquete de widgets",
  769 + "widgets-bundle-file": "Archivo de paquete de widgets",
  770 + "invalid-widgets-bundle-file-error": "Imposible importar paquete de widgets: Estructura de datos inválida."
  771 + },
  772 + "widget-config": {
  773 + "data": "Datos",
  774 + "settings": "Ajustes",
  775 + "advanced": "Avanzado",
  776 + "title": "Titulo",
  777 + "general-settings": "Ajustes generales",
  778 + "display-title": "Mostrar titulo",
  779 + "drop-shadow": "Sombra",
  780 + "enable-fullscreen": "Habilitar pantalla completa",
  781 + "background-color": "Color de fondo",
  782 + "text-color": "Color del texto",
  783 + "padding": "Relleno",
  784 + "title-style": "Estilo de título",
  785 + "mobile-mode-settings": "Ajustes mobile.",
  786 + "order": "Orden",
  787 + "height": "Altura",
  788 + "units": "Caracter especial a mostrar en el siguiente valor",
  789 + "decimals": "Números de dígitos después de la coma",
  790 + "timewindow": "Ventana de tiempo",
  791 + "use-dashboard-timewindow": "Usar ventana de tiempo del Panel",
  792 + "display-legend": "Mostrar leyenda",
  793 + "datasources": "Set de datos",
  794 + "datasource-type": "Tipo",
  795 + "datasource-parameters": "Parámetros",
  796 + "remove-datasource": "Eliminar set de datos",
  797 + "add-datasource": "Agregar set de datos",
  798 + "target-device": "Dispositivo destino"
  799 + },
  800 + "widget-type": {
  801 + "import": "Importar tipo de widget",
  802 + "export": "Exportar tipo de widget",
  803 + "export-failed-error": "Imposible exportar tipo de widget: {{error}}",
  804 + "create-new-widget-type": "Crear nuevo tipo de widget",
  805 + "widget-type-file": "Tipo de archivo del widget",
  806 + "invalid-widget-type-file-error": "Imposible de importar tipo de widget: Estructura de datos inválida."
  807 + },
  808 + "language": {
  809 + "language": "Lenguaje",
  810 + "en_US": "Inglés",
  811 + "ko_KR": "Coreano",
  812 + "zh_CN": "Chino",
  813 + "ru_RU": "Ruso",
  814 + "es_ES": "Español"
  815 + }
  816 + };
  817 + angular.extend(locales, {'es_ES': es_ES});
  818 +}
\ No newline at end of file
... ...
... ... @@ -777,7 +777,8 @@ export default function addLocaleKorean(locales) {
777 777 "en_US": "영어",
778 778 "ko_KR": "한글",
779 779 "zh_CN": "중국어",
780   - "ru_RU": "러시아어"
  780 + "ru_RU": "러시아어",
  781 + "es_ES": "스페인어"
781 782 }
782 783 };
783 784 angular.extend(locales, {'ko_KR': ko_KR});
... ...
... ... @@ -810,7 +810,9 @@ export default function addLocaleRussian(locales) {
810 810 "en_US": "Английский",
811 811 "ko_KR": "Корейский",
812 812 "zh_CN": "Китайский",
813   - "ru_RU": "Русский"
  813 + "ru_RU": "Русский",
  814 + "es_ES": "испанский"
  815 +
814 816 }
815 817 };
816 818 angular.extend(locales, {'ru_RU': ru_RU});
... ...
... ... @@ -810,7 +810,8 @@ export default function addLocaleChinese(locales) {
810 810 "en_US" : "英语",
811 811 "ko_KR" : "韩语",
812 812 "zh_CN" : "汉语",
813   - "ru_RU" : "俄语"
  813 + "ru_RU" : "俄语",
  814 + "es_ES": "西班牙語"
814 815 }
815 816 };
816 817 angular.extend(locales, {
... ...
... ... @@ -812,8 +812,9 @@ export default angular.module('thingsboard.locale', [])
812 812 "en_US": "English",
813 813 "ko_KR": "Korean",
814 814 "zh_CN": "Chinese",
815   - "ru_RU": "Russian"
  815 + "ru_RU": "Russian",
  816 + "es_ES": "Spanish"
816 817 }
817 818 }
818 819 }
819   - ).name;
\ No newline at end of file
  820 + ).name;
... ...
... ... @@ -31,7 +31,8 @@ export default function ProfileController(userService, $scope, $document, $mdDia
31 31 en_US: {value : "en_US", name: "language.en_US"},
32 32 ko_KR: {value : "ko_KR", name: "language.ko_KR"},
33 33 zh_CN: {value : "zh_CN", name: "language.zh_CN"},
34   - ru_RU: {value : "ru_RU", name: "language.ru_RU"}
  34 + ru_RU: {value : "ru_RU", name: "language.ru_RU"}ñ
  35 + es_ES: {value : "es_ES", name: "language.es_ES"},
35 36 };
36 37
37 38 loadProfile();
... ...