- Added FieldHelp component to display help text for form fields. - Integrated help text into AssetCharacteristicControl and ResourceCharacteristicControl. - Updated AssetForm to utilize TabbedFieldSections for better organization of characteristics. - Modified BrandSelect to include help text. - Improved CatalogFieldForm with descriptive hints for the description field. - Refactored FieldSections to support different layouts and improved styling. - Introduced fieldHelpById utility to manage help text for fields. - Updated localization files to include new help text strings. - Enhanced tests to cover new features and ensure functionality.
333 lines
18 KiB
JSON
333 lines
18 KiB
JSON
{
|
|
"brands": {
|
|
"title": "Marcas",
|
|
"introduction": "Gestiona las marcas disponibles para los activos de todas las compañías.",
|
|
"entityLabel": "marcas",
|
|
"new": "Añadir marca",
|
|
"edit": "Editar marca",
|
|
"delete": "Eliminar marca",
|
|
"deleting": "Eliminando…",
|
|
"deleteConfirm": "¿Quieres eliminar la marca «{{name}}»? Esta acción no se puede deshacer.",
|
|
"deleteGuidance": "Solo se pueden eliminar marcas personalizadas sin referencias en activos ni en su historial. Si está en uso, puedes desactivarla desde Editar.",
|
|
"deleteError": "No se ha podido eliminar la marca.",
|
|
"active": "Activa",
|
|
"inactive": "Inactiva",
|
|
"name": "Marca",
|
|
"logo": {
|
|
"label": "Logotipo",
|
|
"none": "Sin logotipo",
|
|
"help": "Opcional: SVG vectorial sin fondo, hasta 32 KiB. Exporta como SVG simple, con viewBox, sin scripts, animaciones, imágenes incrustadas ni referencias externas.",
|
|
"remove": "Quitar logotipo",
|
|
"invalid": "El archivo no es un SVG estático compatible o supera los 32 KiB.",
|
|
"readError": "No se ha podido leer el archivo. Selecciónalo de nuevo."
|
|
},
|
|
"all": "Todas",
|
|
"search": "Buscar por marca...",
|
|
"loading": "Cargando marcas…",
|
|
"loadError": "No se han podido cargar las marcas.",
|
|
"empty": "No hay marcas que coincidan con la búsqueda.",
|
|
"noBrand": "Sin especificar",
|
|
"legacy": "Valor anterior",
|
|
"quickNotice": "La marca se guardará en el catálogo global aunque después canceles el activo.",
|
|
"help": "Una marca identifica al fabricante de un activo. Es común a todas las compañías y no define sus modelos comerciales.",
|
|
"examples": "Ejemplos: LG, HP, Microsoft, Kyocera, Zebra o Clónico para equipos montados con componentes de distintos fabricantes.",
|
|
"guidance": "Puedes añadir marcas y cambiar su disponibilidad. Las marcas de serie conservan su nombre; las personalizadas se pueden renombrar. Desactivar no borra los activos ni su historial.",
|
|
"errors": {
|
|
"INVALID_REQUEST": "Indica un nombre de marca válido.",
|
|
"NAME_EXISTS": "Ya existe una marca con ese nombre, incluso si está desactivada.",
|
|
"BUILTIN_PROTECTED": "Las marcas de serie no se pueden eliminar ni renombrar.",
|
|
"BRAND_IN_USE": "Esta marca está vinculada a activos o a su historial y no se puede eliminar. Puedes desactivarla desde Editar.",
|
|
"BRAND_NOT_FOUND": "La marca ya no está disponible.",
|
|
"INTERNAL_ERROR": "No se ha podido completar la operación con la marca.",
|
|
"FORBIDDEN": "La sesión no permite esta operación. Vuelve a iniciar sesión.",
|
|
"UNAUTHENTICATED": "Vuelve a iniciar sesión."
|
|
}
|
|
},
|
|
"support": {
|
|
"title": "Asistencia técnica remota",
|
|
"new": "Añadir método",
|
|
"edit": "Editar método",
|
|
"tool": "Herramienta",
|
|
"choose": "Selecciona una herramienta",
|
|
"chooseState": "Selecciona un estado",
|
|
"newTool": "Nueva herramienta",
|
|
"destination": "Identificador o destino (opcional)",
|
|
"requiresVpn": "Requiere VPN",
|
|
"preferred": "Método preferido",
|
|
"state": "Estado",
|
|
"pending": "Pendiente de configurar",
|
|
"available": "Disponible",
|
|
"retired": "Retirado",
|
|
"notes": "Notas (opcional)",
|
|
"empty": "No hay métodos de asistencia registrados para este activo.",
|
|
"showRetired": "Mostrar métodos retirados",
|
|
"history": "Historial",
|
|
"loading": "Cargando asistencia remota…",
|
|
"loadError": "No se pudo cargar la asistencia remota.",
|
|
"help": "¿Para qué sirve este método?",
|
|
"description": "Registra cómo un técnico puede prestar soporte remoto a este activo.",
|
|
"guidance": "Puedes registrar varios métodos. Solo uno disponible puede ser el preferido. Documentar un método no establece una conexión ni concede permisos de teletrabajo.",
|
|
"examples": "AnyDesk: 123 456 789; Supremo Control: su identificador; Escritorio remoto: PORT-ANA-01, con VPN si es necesaria.",
|
|
"examplesLabel": "Ejemplos y recomendaciones",
|
|
"scope": "No introduzcas contraseñas ni claves de acceso en el identificador o las notas.",
|
|
"review": "Revisar: el activo está retirado o la herramienta está desactivada.",
|
|
"errors": {
|
|
"INVALID_REQUEST": "Revisa los campos. Solo un método disponible puede marcarse como preferido.",
|
|
"ASSET_NOT_FOUND": "El activo no pertenece a esta compañía o ya no está disponible.",
|
|
"ASSET_RETIRED": "En un activo retirado solo se pueden guardar métodos retirados.",
|
|
"TOOL_UNAVAILABLE": "Selecciona un recurso de asistencia activo de esta compañía.",
|
|
"CONNECTION_NOT_FOUND": "El método ya no está disponible.",
|
|
"PREFERRED_EXISTS": "Ya hay un método preferido. Desmárcalo antes de elegir otro.",
|
|
"CONNECTION_EXISTS": "Ya existe este método con el mismo identificador o destino.",
|
|
"INTERNAL_ERROR": "No se pudo completar la operación."
|
|
}
|
|
},
|
|
"assetPanel": "Ficha del activo seleccionado",
|
|
"closeAssetPanel": "Cerrar ficha lateral",
|
|
"showAssetPanel": "Mostrar ficha lateral",
|
|
"inventory": "Activos",
|
|
"chooseValue": "Selecciona una opción",
|
|
"relatedNotice": "El elemento se guarda por separado y se conserva aunque después canceles el formulario principal.",
|
|
"newAsset": "Nuevo activo",
|
|
"editAsset": "Editar activo",
|
|
"viewAsset": "Ficha e historial",
|
|
"template": "Plantilla",
|
|
"site": "Sede",
|
|
"person": "Persona asignada",
|
|
"status": "Estado",
|
|
"notes": "Notas",
|
|
"available": "Disponible",
|
|
"in_use": "En uso",
|
|
"maintenance": "En mantenimiento",
|
|
"retired": "Retirado",
|
|
"noAssets": "Esta compañía todavía no tiene activos.",
|
|
"noAssignment": "Sin asignar",
|
|
"noValue": "Sin indicar",
|
|
"characteristics": "Características",
|
|
"history": "Historial",
|
|
"recordedBy": "Registrado por {{name}}",
|
|
"snapshotNotice": "La plantilla queda fijada al crear el activo. Sus características se conservan aunque después cambie el catálogo.",
|
|
"newSite": "Nueva sede",
|
|
"newPerson": "Nueva persona",
|
|
"assetDescription": "Un activo es un elemento informático concreto de esta compañía. La plantilla indica qué características puedes registrar.",
|
|
"assetExamples": "Portátil de Ana, monitor de recepción o switch de la sede central.",
|
|
"assetGuidance": "Solo son obligatorios el nombre, la plantilla y los campos exigidos por tu plantilla. Puedes completar el resto más adelante. Retirar un activo conserva su historial y su pertenencia histórica a puestos.",
|
|
"assetScope": "El activo pertenece a esta compañía. La sede es opcional y debe pertenecer a ella; la relación con una persona se registra desde un puesto de trabajo o un perfil de usuario.",
|
|
"saveAssetError": "No se pudo guardar el activo.",
|
|
"inventoryErrors": {
|
|
"BRAND_UNAVAILABLE": "La marca no está disponible para nuevas asignaciones.",
|
|
"SELF_RELATIONSHIP": "Un activo no puede relacionarse consigo mismo.",
|
|
"RELATIONSHIP_EXISTS": "Ya existe esa relación entre estos activos.",
|
|
"RELATIONSHIP_NOT_FOUND": "La relación no existe en esta compañía.",
|
|
"RELATION_TYPE_UNAVAILABLE": "El tipo de relación debe estar activo en esta compañía.",
|
|
"INVALID_MEMBERS": "Selecciona activos distintos y válidos.",
|
|
"WORKSTATION_NOT_FOUND": "El puesto no existe en esta compañía.",
|
|
"ASSET_IN_WORKSTATION": "Un activo ya pertenece a otro puesto activo. Retíralo de allí antes de asignarlo.",
|
|
"INVALID_REQUEST": "Revisa los datos del formulario.",
|
|
"INVALID_CHARACTERISTICS": "Alguna característica no corresponde a su campo o tipo.",
|
|
"REQUIRED_CHARACTERISTICS": "Completa las características obligatorias de la plantilla.",
|
|
"TEMPLATE_FIXED": "No se puede cambiar la plantilla de un activo existente.",
|
|
"TEMPLATE_UNAVAILABLE": "La plantilla debe estar activa y disponible para esta compañía.",
|
|
"SITE_NOT_FOUND": "La sede no pertenece a esta compañía.",
|
|
"PERSON_UNAVAILABLE": "La persona debe estar activa y pertenecer a esta compañía.",
|
|
"COMPANY_NOT_FOUND": "Compañía no encontrada.",
|
|
"ASSET_NOT_FOUND": "Activo no encontrado en esta compañía.",
|
|
"INTERNAL_ERROR": "No se pudo completar la operación.",
|
|
"FORBIDDEN": "Vuelve a iniciar sesión.",
|
|
"UNAUTHENTICATED": "Vuelve a iniciar sesión."
|
|
},
|
|
"workstations": "Puestos de trabajo",
|
|
"newWorkstation": "Nuevo puesto",
|
|
"addSharedWorkstationAsset": "Añadir un recurso compartido",
|
|
"exclusiveWorkstationAssets": "Activos exclusivos",
|
|
"sharedWorkstationAssets": "Recursos compartidos",
|
|
"noSharedWorkstationAssets": "Sin recursos compartidos.",
|
|
"editWorkstation": "Editar puesto",
|
|
"workstationPerson": "Persona del puesto",
|
|
"workstationHistory": "Historial del puesto",
|
|
"workstationAssets": "Activos del puesto",
|
|
"noWorkstations": "Esta compañía todavía no tiene puestos de trabajo.",
|
|
"noWorkstationAssets": "Este puesto todavía no tiene activos.",
|
|
"addWorkstationAsset": "Añadir un activo exclusivo",
|
|
"workstationOccupied": "{{name}} · ocupado en otro puesto",
|
|
"removeWorkstationAsset": "Retirar {{name}} del puesto",
|
|
"workstationCount": "{{count}} activos",
|
|
"workstationCount_one": "{{count}} activo",
|
|
"workstationCount_other": "{{count}} activos",
|
|
"workstationDescription": "Un puesto reúne los activos que una persona utiliza habitualmente. Puede quedar sin persona o sede y puede crearse sin activos.",
|
|
"workstationExamples": "Puesto de Ana: portátil, dos monitores y una impresora. Una persona puede tener varios puestos.",
|
|
"workstationGuidance": "Los activos exclusivos solo pueden estar en un puesto activo. Los recursos compartidos pueden utilizarse en varios puestos, siempre que no estén reservados como exclusivos. Desactivar conserva la composición y libera sus activos; reactivar comprueba su disponibilidad. El puesto no cambia las asignaciones individuales de los activos.",
|
|
"workstationScope": "Todos los elementos deben pertenecer a esta compañía. Los cambios de persona, sede y composición conservan historial.",
|
|
"workstationInAsset": "Puesto de trabajo",
|
|
"noWorkstation": "Sin puesto activo",
|
|
"relations": "Relaciones",
|
|
"newRelation": "Nuevo tipo de relación",
|
|
"editRelation": "Editar tipo de relación",
|
|
"inverseName": "Nombre visto desde el otro activo",
|
|
"symmetric": "Mismo nombre en ambos sentidos",
|
|
"directional": "Relación con dirección",
|
|
"relationDescription": "Un tipo de relación describe cómo se vinculan dos activos de una misma compañía.",
|
|
"relationExamples": "Portátil → Conectado a → Monitor. Máquina virtual → Alojado en → Servidor; desde el servidor se lee «Aloja».",
|
|
"relationGuidance": "Puedes desactivar tipos sin perder los vínculos existentes. La dirección queda fija tras el alta. Las relaciones conservan los nombres que tenían al crearse.",
|
|
"linkAsset": "Relacionar activo",
|
|
"relationshipType": "Tipo de relación",
|
|
"targetAsset": "Otro activo",
|
|
"chooseRelation": "Selecciona una relación",
|
|
"chooseAsset": "Selecciona un activo",
|
|
"noRelationships": "Este activo no tiene relaciones vigentes.",
|
|
"endedRelationships": "Relaciones retiradas",
|
|
"endRelationship": "Retirar relación",
|
|
"endRelationshipConfirm": "Se conservará el historial de esta relación.",
|
|
"relationshipHelp": "Vincula equipos que trabajan juntos o dependen de otros. Solo se muestran activos de esta compañía.",
|
|
"relationshipExample": "Por ejemplo: este portátil está conectado a un monitor externo.",
|
|
"relationshipGuidance": "Selecciona primero el tipo y después el otro activo. Retirar una relación no elimina los activos.",
|
|
"quickRelationNotice": "El tipo se guardará para esta compañía aunque después canceles la relación.",
|
|
"relationCreated": "Creada por {{name}} · {{date}}",
|
|
"relationEnded": "Retirada por {{name}} · {{date}}",
|
|
"yes": "Sí",
|
|
"no": "No",
|
|
"title": "Catálogo de activos",
|
|
"companyTitle": "Catálogo de activos",
|
|
"introduction": "Define las características y plantillas que utilizarás al registrar activos.",
|
|
"companyIntroduction": "Utiliza las definiciones globales y añade las que necesite esta compañía.",
|
|
"fields": "Campos",
|
|
"templates": "Plantillas",
|
|
"newField": "Nuevo campo",
|
|
"editField": "Editar campo",
|
|
"newTemplate": "Nueva plantilla",
|
|
"editTemplate": "Editar plantilla",
|
|
"name": "Nombre",
|
|
"description": "Descripción (opcional)",
|
|
"type": "Tipo de dato",
|
|
"unit": "Unidad (opcional)",
|
|
"choices": "Valores de la lista",
|
|
"choicesHelp": "Escribe un valor por línea. Los valores existentes se conservan; puedes añadir otros.",
|
|
"text": "Texto",
|
|
"number": "Número",
|
|
"date": "Fecha",
|
|
"boolean": "Sí / No",
|
|
"choice": "Lista de valores",
|
|
"active": "Activo",
|
|
"inactive": "Inactivo",
|
|
"activate": "Activar",
|
|
"deactivate": "Desactivar",
|
|
"inherited": "Configuración global",
|
|
"overridden": "Personalizado en esta compañía",
|
|
"reset": "Usar configuración global",
|
|
"builtin": "De serie",
|
|
"global": "Global",
|
|
"own": "De la compañía",
|
|
"custom": "Personalizado",
|
|
"origin": "Origen",
|
|
"actions": "Acciones",
|
|
"edit": "Editar",
|
|
"copy": "Crear copia",
|
|
"copyName": "{{name}} (copia)",
|
|
"fieldCount": "{{count}} campos",
|
|
"search": "Buscar",
|
|
"empty": "No hay resultados.",
|
|
"loading": "Cargando catálogo…",
|
|
"retry": "Reintentar",
|
|
"save": "Guardar",
|
|
"saving": "Guardando…",
|
|
"cancel": "Cancelar",
|
|
"selectField": "Añadir un campo a la plantilla",
|
|
"choose": "Selecciona un campo",
|
|
"addField": "Nuevo campo",
|
|
"required": "Obligatorio",
|
|
"chooseType": "Selecciona un tipo",
|
|
"view": "Ver",
|
|
"close": "Cerrar",
|
|
"viewDefinition": "{{name}}",
|
|
"optional": "Opcional",
|
|
"remove": "Retirar campo: {{name}}",
|
|
"noFields": "Añade al menos un campo. Todos son opcionales inicialmente.",
|
|
"fieldHelpText": "Texto de ayuda (opcional)",
|
|
"fieldHelpHint": "Se muestra junto al campo al crear o editar un activo.",
|
|
"protected": "Las plantillas y campos de serie se pueden editar desde el catálogo global. El tipo de dato de un campo se mantiene fijo. Puedes cambiar la disponibilidad o crear una copia de una plantilla para una compañía.",
|
|
"helpTitle": "¿Qué es y para qué sirve?",
|
|
"examplesLabel": "Ver ejemplos y recomendaciones",
|
|
"fieldDescription": "Un campo describe una característica que podrás rellenar en un activo. Puedes reutilizarlo en varias plantillas.",
|
|
"fieldExamples": "Ejemplos: Procesador (texto), Pulgadas (número), Fin de garantía (fecha), PoE (sí/no) o Estado de batería (lista).",
|
|
"fieldGuidance": "Elige una unidad si ayuda, por ejemplo GB. No guardes contraseñas ni secretos. El tipo de dato queda fijo después del alta.",
|
|
"templateDescription": "Una plantilla reúne los campos que se mostrarán para un tipo de activo. No es un equipo concreto ni una marca o modelo comercial.",
|
|
"templateExamples": "Monitor: pulgadas, resolución y conexiones. Portátil: procesador, memoria RAM y almacenamiento.",
|
|
"templateGuidance": "Las características son opcionales por defecto. Marca como obligatorio solo lo que siempre se conozca. Retirar un campo de una plantilla no elimina el campo del catálogo.",
|
|
"globalHelp": "Ámbito global: disponible para todas las compañías.",
|
|
"companyHelp": "Ámbito de compañía: estas adiciones y cambios de disponibilidad solo afectan a esta compañía.",
|
|
"disabledField": "Campo inactivo: se conserva en esta plantilla.",
|
|
"disabledFieldsNotice": "Esta plantilla contiene campos inactivos. Puedes activarlos en el catálogo antes de utilizarla.",
|
|
"quickNotice": "El campo se guardará aunque después canceles la plantilla.",
|
|
"errors": {
|
|
"RELATION_DIRECTION_FIXED": "La dirección de una relación no se puede cambiar.",
|
|
"INVALID_REQUEST": "Revisa los datos del formulario.",
|
|
"INVALID_CHOICES": "Una lista necesita valores únicos y no vacíos. Los demás tipos no admiten valores de lista.",
|
|
"INVALID_FIELDS": "La plantilla necesita campos distintos y válidos.",
|
|
"NAME_EXISTS": "Ya existe una definición de este tipo con ese nombre.",
|
|
"FIELD_UNAVAILABLE": "Solo puedes añadir campos activos del catálogo global o de esta compañía.",
|
|
"FIELD_TYPE_FIXED": "El tipo de dato no se puede cambiar ni se pueden eliminar valores existentes de una lista.",
|
|
"BUILTIN_PROTECTED": "Los tipos de relación de serie no se pueden modificar.",
|
|
"DEFINITION_NOT_FOUND": "La definición no está disponible en este ámbito.",
|
|
"COMPANY_NOT_FOUND": "No se ha encontrado la compañía.",
|
|
"INTERNAL_ERROR": "No se ha podido completar la operación.",
|
|
"FORBIDDEN": "La sesión no permite esta operación. Vuelve a iniciar sesión.",
|
|
"UNAUTHENTICATED": "Vuelve a iniciar sesión.",
|
|
"INVALID_SECTIONS": "Las secciones deben tener nombres únicos y cada campo debe pertenecer a una sección de esta plantilla."
|
|
},
|
|
"sections": {
|
|
"title": "Secciones de la plantilla",
|
|
"add": "Añadir sección",
|
|
"name": "Nombre de la sección",
|
|
"description": "Descripción (opcional)",
|
|
"ungrouped": "Sin sección",
|
|
"moveUp": "Mover hacia arriba",
|
|
"moveDown": "Mover hacia abajo",
|
|
"remove": "Eliminar sección",
|
|
"removeField": "Quitar campo",
|
|
"required": "Obligatorio",
|
|
"assign": "Sección",
|
|
"help": "Organiza los campos sin cambiar sus valores ni su obligatoriedad. Al eliminar una sección, sus campos pasan a «Sin sección».",
|
|
"empty": "Esta sección aún no tiene campos."
|
|
},
|
|
"formLayout": {
|
|
"identity": "Identificación y asignación",
|
|
"template": "Datos de la plantilla"
|
|
},
|
|
"detailSections": {
|
|
"identification": "Identificación",
|
|
"assignment": "Ubicación y asignación",
|
|
"notes": "Observaciones"
|
|
},
|
|
"deleteRecord": {
|
|
"title": "Eliminar registro",
|
|
"description": "Se eliminarán este registro y su historial. Los activos, recursos, cuentas y personas relacionados se conservarán. Esta acción no se puede deshacer.",
|
|
"pending": "Eliminando…",
|
|
"error": "No se ha podido eliminar el registro. Inténtalo de nuevo."
|
|
},
|
|
"templateIcon": {
|
|
"label": "Icono (opcional)",
|
|
"none": "Sin icono",
|
|
"help": "Identifica visualmente la plantilla y sus activos. Puedes cambiarlo o quitarlo en las plantillas personalizadas.",
|
|
"options": {
|
|
"laptop": "Portátil",
|
|
"desktop": "Ordenador de sobremesa",
|
|
"monitor": "Monitor",
|
|
"printer": "Impresora",
|
|
"router": "Router",
|
|
"shield": "Seguridad / firewall",
|
|
"network": "Switch / red",
|
|
"wifi": "Wi-Fi",
|
|
"hard-drive": "NAS / almacenamiento",
|
|
"server": "Servidor",
|
|
"smartphone": "Smartphone",
|
|
"battery": "SAI / batería",
|
|
"tablet": "Tablet",
|
|
"keyboard": "Teclado",
|
|
"mouse": "Ratón",
|
|
"headphones": "Auriculares",
|
|
"camera": "Cámara",
|
|
"box": "Otro activo"
|
|
}
|
|
}
|
|
}
|