mirror of
https://github.com/hcengineering/platform.git
synced 2026-08-20 03:15:41 +02:00
* feat(tracker): field-prefixed search, inline filter chips and zero-hit empty state Adds SearchInputAdvanced (field:value prefixes routed to Elasticsearch query_string), match highlighting, inline filter chips with overflow popover, a reusable zero-hit empty state in view-resources, and search-scope/highlight view options for List and Kanban. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com> * refactor(tracker-search): address review follow-ups on search/filter rework Shared, non-storage-specific field list, test-folder conventions, locale coverage, single regex source and an owner-token gate for the result count. - core: add shared `fullTextSearchFields` constant next to FullTextSearchContext as the single source of truth for the full-text fields exposed to `field:value` targeting. The client encoder derives ES_NATIVE_FIELDS from it and the elastic adapter derives KNOWN_FIELD_RE from it, replacing the two "KEEP IN SYNC" copies. Per-field boost weights stay a local adapter detail. - tests: move the five co-located tests into each package's existing test folder convention (ui `__test__`, view-resources `__tests__`) and fix the relative imports. - i18n: translate the new tracker search/filter strings in the remaining locales (zh, ja, ko, cs, es, fr, it, pt, pt-br, tr), reusing each file's existing terminology; ICU placeholders left unchanged. - encoder: hoist the reserved-character class into one constant and build two RegExp instances from it (non-global for `.test()`, global for `.replace()`) to avoid the shared-lastIndex trap. - view-resources: guard `resultIssueCountStore` writes with an owner-token gate so a superseded viewlet can no longer clobber the active viewlet's count; List/KanbanView claim and release, IssuesView resets through the current owner. Assumes a single active IssuesView surface. - view-resources: make result-count reporting opt-in via a new `reportResultCount` prop on List (default true). Embedded, non-primary List instances (sub-issues / related issues in the issue edit panel, routed through SubIssueList) pass false and never claim the owner token, so opening and closing an issue can no longer strand the primary Issues viewlet with a dead token — the zero-hit SearchEmptyState card renders again afterwards. Add a regression test covering the opted-out embedded consumer. - elastic: escape every regex metacharacter (not just `.`) when building KNOWN_FIELD_RE from `fullTextSearchFields`, so a future field name carrying another metacharacter cannot silently corrupt the alternation. Behaviour for the current fields is unchanged. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com> * refactor(tracker-search): centralize regex escaping and lock down result-count store - Share escapeRegExp from @hcengineering/core so the client encoder and the server elastic adapter escape the fulltext field list identically, not just dots on the client. - Export resultIssueCountStore as a read-only Readable; the owner-token gate functions (setResultCount / resetResultCount / releaseResultCountOwner) are now the only write path. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com> --------- Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com> Co-authored-by: Michael Uray <michaeluray@users.noreply.github.com> Co-authored-by: Artyom Savchenko <armisav@gmail.com>
294 lines
13 KiB
JSON
294 lines
13 KiB
JSON
{
|
|
"string": {
|
|
"TrackerApplication": "Seguimiento",
|
|
"Projects": "Tus proyectos",
|
|
"More": "Más",
|
|
"Default": "Por defecto",
|
|
"MakeDefault": "Establecer como por defecto",
|
|
"Delete": "Eliminar",
|
|
"Open": "Abrir",
|
|
"Members": "Miembros",
|
|
"Inbox": "Bandeja de entrada",
|
|
"MyIssues": "Mis tareas",
|
|
"ViewIssue": "Ver tarea",
|
|
"IssueCreated": "Tarea creada",
|
|
"Issues": "Tareas",
|
|
"Views": "Vistas",
|
|
"Active": "Activo",
|
|
"AllIssues": "Todas las tareas",
|
|
"ActiveIssues": "Tareas activas",
|
|
"BacklogIssues": "Atrasadas",
|
|
"Backlog": "Atrasadas",
|
|
"Board": "Tablero",
|
|
"Components": "Componentes",
|
|
"AllComponents": "Todos",
|
|
"BacklogComponents": "Atrasados",
|
|
"ActiveComponents": "Activos",
|
|
"ClosedComponents": "Cerrados",
|
|
"NewComponent": "Nuevo componente",
|
|
"CreateComponent": "Crear componente",
|
|
"ComponentNamePlaceholder": "Nombre del componente",
|
|
"ComponentDescriptionPlaceholder": "Descripción (opcional)",
|
|
"ComponentLead": "Responsable del componente",
|
|
"ComponentMembers": "Miembros del componente",
|
|
"StartDate": "Fecha de inicio",
|
|
"TargetDate": "Fecha objetivo",
|
|
"Planned": "Planificado",
|
|
"InProgress": "En progreso",
|
|
"Paused": "Pausado",
|
|
"Completed": "Completado",
|
|
"Canceled": "Cancelado",
|
|
"CreateProject": "Crear proyecto",
|
|
"NewProject": "Nuevo proyecto",
|
|
"ProjectTitle": "Título del proyecto",
|
|
"ProjectTitlePlaceholder": "Nuevo proyecto",
|
|
"UsedInIssueIDs": "Utilizado en IDs de tareas",
|
|
"Identifier": "Identificador",
|
|
"Import": "Importar",
|
|
"ProjectIdentifier": "Identificador del proyecto",
|
|
"IdentifierExists": "El identificador del proyecto ya existe",
|
|
"ProjectIdentifierPlaceholder": "PROJ",
|
|
"ChooseIcon": "Seleccionar icono",
|
|
"AddIssue": "Añadir tarea",
|
|
"NewIssue": "Nueva tarea",
|
|
"NewIssuePlaceholder": "Nueva",
|
|
"ResumeDraft": "Continuar borrador",
|
|
"SaveIssue": "Crear tarea",
|
|
"SetPriority": "Establecer prioridad\u2026",
|
|
"SetStatus": "Establecer estado\u2026",
|
|
"SelectIssue": "Seleccionar tarea",
|
|
"Priority": "Prioridad",
|
|
"NoPriority": "Sin prioridad",
|
|
"Urgent": "Urgente",
|
|
"High": "Alta",
|
|
"Medium": "Media",
|
|
"Low": "Baja",
|
|
"Unassigned": "Sin asignar",
|
|
"Back": "Atrás",
|
|
"List": "Lista",
|
|
"NumberLabels": "{count, plural, =0 {sin etiquetas} =1 {1 etiqueta} other {# etiquetas}}",
|
|
"CategoryBacklog": "Atraso",
|
|
"CategoryUnstarted": "Por Iniciar",
|
|
"CategoryStarted": "Iniciado",
|
|
"CategoryCompleted": "Completado",
|
|
"CategoryCanceled": "Cancelado",
|
|
"Title": "Título",
|
|
"Name": "Nombre",
|
|
"Description": "Descripción",
|
|
"Status": "Estado",
|
|
"Number": "Número",
|
|
"Assignee": "Asignado a",
|
|
"AssignTo": "Asignar a...",
|
|
"AssignedTo": "Asignado a {value}",
|
|
"Parent": "Tarea principal",
|
|
"SetParent": "Establecer tarea principal...",
|
|
"ChangeParent": "Cambiar tarea principal...",
|
|
"RemoveParent": "Eliminar tarea principal",
|
|
"OpenParent": "Abrir tarea principal",
|
|
"SubIssues": "Subtareas",
|
|
"SubIssuesList": "Subtareas ({subIssues})",
|
|
"OpenSubIssues": "Abrir subtareas",
|
|
"AddSubIssues": "Añadir subtarea",
|
|
"BlockedBy": "Bloqueado por",
|
|
"RelatedTo": "Relacionado con",
|
|
"Comments": "Comentarios",
|
|
"Attachments": "Adjuntos",
|
|
"Labels": "Etiquetas",
|
|
"Component": "Componente",
|
|
"Space": "",
|
|
"SetDueDate": "Establecer fecha de vencimiento...",
|
|
"ChangeDueDate": "Cambiar fecha de vencimiento...",
|
|
"ModificationDate": "Actualizado {value}",
|
|
"Project": "Proyecto",
|
|
"Issue": "Tarea",
|
|
"SubIssue": "Subtarea",
|
|
"Document": "",
|
|
"DocumentIcon": "",
|
|
"DocumentColor": "",
|
|
"Rank": "Posición",
|
|
"TypeIssuePriority": "Prioridad de la tarea",
|
|
"IssueTitlePlaceholder": "Título de la tarea",
|
|
"SubIssueTitlePlaceholder": "Título de la subtarea",
|
|
"IssueDescriptionPlaceholder": "Añadir descripción...",
|
|
"SubIssueDescriptionPlaceholder": "Añadir descripción de la subtarea",
|
|
"AddIssueTooltip": "Añadir tarea...",
|
|
"NewIssueDialogClose": "¿Quieres cerrar este diálogo?",
|
|
"NewIssueDialogCloseNote": "Se perderán todos los cambios",
|
|
"RemoveComponentDialogClose": "¿Eliminar el componente?",
|
|
"RemoveComponentDialogCloseNote": "¿Estás seguro de que quieres eliminar este componente? Esta operación no se puede deshacer",
|
|
"Grouping": "Agrupación",
|
|
"Ordering": "Ordenación",
|
|
"CompletedIssues": "Tareas completadas",
|
|
"NoGrouping": "Sin agrupación",
|
|
"NoAssignee": "Sin asignar",
|
|
"LastUpdated": "Última actualización",
|
|
"DueDate": "Fecha de vencimiento",
|
|
"IssueStartDate": "Fecha de inicio",
|
|
"GanttDependency": "Dependency",
|
|
"GanttLag": "Lag",
|
|
"Manual": "Manual",
|
|
"All": "Todos",
|
|
"PastWeek": "Semana pasada",
|
|
"PastMonth": "Mes pasado",
|
|
"CopyIssueUrl": "Copiar URL de la tarea al portapapeles",
|
|
"CopyIssueId": "Copiar ID de la tarea al portapapeles",
|
|
"CopyIssueBranch": "Copiar nombre de la rama Git al portapapeles",
|
|
"CopyIssueTitle": "Copiar título de la tarea al portapapeles",
|
|
"AssetLabel": "Activo",
|
|
"AddToComponent": "Añadir al componente...",
|
|
"MoveToComponent": "Mover al componente...",
|
|
"NoComponent": "Sin componente",
|
|
"ComponentLeadTitle": "Responsable del componente",
|
|
"ComponentMembersTitle": "Miembros del componente",
|
|
"ComponentLeadSearchPlaceholder": "Establecer responsable del componente...",
|
|
"ComponentMembersSearchPlaceholder": "Cambiar miembros del componente...",
|
|
"MoveToProject": "Mover al proyecto",
|
|
"Duplicate": "Duplicar",
|
|
"GotoIssues": "Ir a tareas",
|
|
"GotoActive": "Ir a tareas activas",
|
|
"GotoBacklog": "Ir al backlog",
|
|
"GotoComponents": "Ir a componentes",
|
|
"GotoMyIssues": "Ir a mis tareas",
|
|
"GotoTrackerApplication": "Cambiar a la aplicación de seguimiento",
|
|
"CreatedOne": "Creada",
|
|
"MoveIssues": "Mover tareas",
|
|
"MoveIssuesDescription": "Selecciona el proyecto al que deseas mover las tareas",
|
|
"ManageAttributes": "Gestionar atributos",
|
|
"KeepOriginalAttributes": "Mantener atributos originales",
|
|
"KeepOriginalAttributesTooltip": "Se mantendrán los estados y componentes originales en el nuevo proyecto",
|
|
"SelectReplacement": "Los siguientes elementos no están disponibles en el nuevo proyecto. Seleccione un reemplazo.",
|
|
"MissingItem": "SIN ELEMENTO",
|
|
"Replacement": "REEMPLAZO",
|
|
"Original": "ORIGINAL",
|
|
"OriginalDescription": "Los elementos de esta sección se crearán en el nuevo proyecto",
|
|
"Relations": "Relaciones",
|
|
"RemoveRelation": "Eliminar relación...",
|
|
"AddBlockedBy": "Marcar como bloqueado por...",
|
|
"AddIsBlocking": "Marcar como bloqueador...",
|
|
"AddRelatedIssue": "Referenciar otro problema...",
|
|
"RelatedIssue": "Problema relacionado {id} - {title}",
|
|
"BlockedIssue": "Problema bloqueado {id} - {title}",
|
|
"BlockingIssue": "Problema bloqueador {id} - {title}",
|
|
"BlockedBySearchPlaceholder": "Buscar problema para marcar como bloqueado por...",
|
|
"IsBlockingSearchPlaceholder": "Buscar problema para marcar como bloqueador...",
|
|
"RelatedIssueSearchPlaceholder": "Buscar problema para referenciar...",
|
|
"Blocks": "Bloquea",
|
|
"Related": "Relacionado",
|
|
"RelatedIssues": "Problemas relacionados",
|
|
"EditIssue": "Editar {title}",
|
|
"EditWorkflowStatuses": "Editar estados de problema",
|
|
"EditProject": "Editar proyecto",
|
|
"DeleteProject": "Eliminar proyecto",
|
|
"ArchiveProjectName": "¿Archivar proyecto {name}?",
|
|
"ArchiveProjectConfirm": "¿Desea archivar este proyecto?",
|
|
"DeleteProjectConfirm": "¿Desea eliminar este proyecto y todos los problemas?",
|
|
"ProjectHasIssues": "Hay problemas existentes en este proyecto, ¿está seguro de que desea archivarlos?",
|
|
"ManageWorkflowStatuses": "Administrar tipos de proyecto",
|
|
"AddWorkflowStatus": "Agregar estado de problema",
|
|
"EditWorkflowStatus": "Editar estado de problema",
|
|
"DeleteWorkflowStatus": "Eliminar estado de problema",
|
|
"DeleteWorkflowStatusConfirm": "¿Desea eliminar el estado \"{status}\"?",
|
|
"DeleteWorkflowStatusErrorDescription": "El estado \"{status}\" tiene {count, plural, =1 {1 problema} other {# problemas}} asignados. Por favor seleccione un estado al que moverlos",
|
|
"Save": "Guardar",
|
|
"IncludeItemsThatMatch": "Incluir elementos que coincidan",
|
|
"AnyFilter": "cualquier filtro",
|
|
"AllFilters": "todos los filtros",
|
|
"NoDescription": "Sin descripción",
|
|
"SearchIssue": "Buscar tarea...",
|
|
"StatusHistory": "Historial de estado",
|
|
"NewSubIssue": "Agregar subproblema...",
|
|
"AddLabel": "Agregar etiqueta",
|
|
"DeleteIssue": "Eliminar {issueCount, plural, =1 {problema} other {# problemas}}",
|
|
"DeleteIssueConfirm": "¿Desea eliminar {issueCount, plural, =1 {problema} other {problemas}}{subIssueCount, plural, =0 {?} =1 { y subproblema?} other { y subproblemas?}}",
|
|
"Milestone": "Hitos",
|
|
"NoMilestone": "Sin hito",
|
|
"MoveToMilestone": "Seleccionar hito",
|
|
"Milestones": "Hitos",
|
|
"AllMilestones": "Todos",
|
|
"PlannedMilestones": "Planificados",
|
|
"ActiveMilestones": "Activos",
|
|
"ClosedMilestones": "Completados",
|
|
"AddToMilestone": "Agregar a hito",
|
|
"MilestoneNamePlaceholder": "Nombre del hito",
|
|
"NewMilestone": "Nuevo hito",
|
|
"CreateMilestone": "Crear",
|
|
"MoveAndDeleteMilestone": "Mover problemas a {newMilestone} y eliminar {deleteMilestone}",
|
|
"MoveAndDeleteMilestoneConfirm": "¿Desea eliminar el hito y mover los problemas a otro hito?",
|
|
"Estimation": "Estimación",
|
|
"ReportedTime": "Tiempo empleado",
|
|
"RemainingTime": "Tiempo restante",
|
|
"TimeSpendReports": "Informes de tiempo empleado",
|
|
"TimeSpendReport": "Tiempo",
|
|
"TimeSpendReportAdd": "Agregar informe de tiempo",
|
|
"TimeSpendReportDate": "Fecha",
|
|
"TimeSpendReportValue": "Tiempo empleado",
|
|
"TimeSpendReportValueTooltip": "Tiempo empleado en horas",
|
|
"TimeSpendReportDescription": "Descripción",
|
|
"TimeSpendDays": "{value}d",
|
|
"TimeSpendHours": "{value}h",
|
|
"TimeSpendMinutes": "{value}m",
|
|
"ChildEstimation": "Estimación de subtemas",
|
|
"ChildReportedTime": "Tiempo de subtemas",
|
|
"CapacityValue": "de {value}d",
|
|
"NewRelatedIssue": "Nuevo problema relacionado",
|
|
"RelatedIssuesNotFound": "Problemas relacionados no encontrados",
|
|
"AddedReference": "Referencia añadida",
|
|
"AddedAsBlocked": "Marcado como bloqueado",
|
|
"AddedAsBlocking": "Marcado como bloqueante",
|
|
"IssueTemplate": "Plantilla",
|
|
"IssueTemplates": "Plantillas",
|
|
"NewProcess": "Nueva plantilla",
|
|
"SaveProcess": "Guardar plantilla",
|
|
"NoIssueTemplate": "Sin plantilla",
|
|
"TemplateReplace": "¿Desea aplicar la nueva plantilla?",
|
|
"TemplateReplaceConfirm": "Todos los campos serán sobrescritos por los valores de la nueva plantilla",
|
|
"Apply": "Aplicar",
|
|
"CurrentWorkDay": "Día laboral actual",
|
|
"PreviousWorkDay": "Día laboral anterior",
|
|
"TimeReportDayTypeLabel": "Seleccionar tipo de día para reporte de tiempo",
|
|
"DefaultAssignee": "Asignado por defecto para problemas",
|
|
"SevenHoursLength": "Siete horas",
|
|
"EightHoursLength": "Ocho horas",
|
|
"HourLabel": "h",
|
|
"MinuteLabel": "m",
|
|
"Saved": "Guardado...",
|
|
"CreatedIssue": "Problema creado",
|
|
"CreatedSubIssue": "Sub-problema creado",
|
|
"ChangeStatus": "Cambiar estado",
|
|
"ConfigLabel": "Rastreador",
|
|
"ConfigDescription": "Extensión para gestionar elementos de trabajo y realizar todas las tareas realizadas.",
|
|
"NoStatusFound": "No se encontró ningún estado coincidente",
|
|
"CreateMissingStatus": "Crear estado faltante",
|
|
"UnsetParent": "El problema padre será desmarcado",
|
|
"AllProjects": "Todos los proyectos",
|
|
"IssueNotificationTitle": "{issueTitle}",
|
|
"IssueNotificationBody": "Actualizado por {senderName}",
|
|
"IssueNotificationChanged": "{senderName} cambió {property}",
|
|
"IssueNotificationChangedProperty": "{senderName} cambió {property} a \"{newValue}\"",
|
|
"IssueNotificationMessage": "{senderName}: {message}",
|
|
"PreviousAssigned": "Anteriormente asignado",
|
|
"IssueAssignedToYou": "Asignado a ti",
|
|
"RelatedIssueTargetDescription": "Proyecto de destino de problema relacionado para Clase o Espacio",
|
|
"MapRelatedIssues": "Configurar proyectos predeterminados de problemas relacionados",
|
|
"DefaultIssueStatus": "Estado de problema predeterminado",
|
|
"IssueStatus": "Estado",
|
|
"Extensions": "Extensions",
|
|
"UnsetParentIssue": "Unset parent issue",
|
|
"ForbidCreateProjectPermission": "Prohibir crear proyecto",
|
|
"ForbidCreateProjectPermissionDescription": "Prohíbe a los usuarios crear nuevos proyectos",
|
|
"AllowCreatingIssues": "Permitir crear incidencias",
|
|
"ModeSelectorDisabledByFilter": "El estado está controlado por un filtro activo. Elimina el filtro de estado para usar este atajo.",
|
|
"ShowQuickModeSelector": "Filtro rápido: Todos / Activos / Atrasados",
|
|
"SearchScopeLabel": "Buscar en…",
|
|
"SearchScopeTitle": "Solo título",
|
|
"SearchScopeTitleDescription": "Título + descripción",
|
|
"SearchScopeAll": "Título + descripción + comentarios",
|
|
"SearchHighlight": "Resaltar coincidencias de búsqueda",
|
|
"SearchEmptyTitle": "No se encontraron tareas para \"{query}\"",
|
|
"SearchEmptyActiveFilters": "Filtros activos: {filters}",
|
|
"SearchEmptyClearFilters": "Buscar sin filtros",
|
|
"SearchEmptyAllProjects": "Buscar en todos los proyectos"
|
|
},
|
|
"status": {}
|
|
}
|