Files
1be6047c8a feat(tracker): field-prefixed search, inline filter chips and zero-hit empty state (#10998)
* 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>
2026-08-11 19:09:33 +07:00

301 lines
13 KiB
JSON

{
"string": {
"TrackerApplication": "Přehled",
"Projects": "Vaše projekty",
"More": "Více",
"Default": "Výchozí",
"MakeDefault": "Nastavit jako výchozí",
"Delete": "Smazat",
"Open": "Otevřít",
"Members": "Členové",
"Inbox": "Doručená pošta",
"MyIssues": "Mé úkoly",
"ViewIssue": "Zobrazit úkol",
"IssueCreated": "Úkol vytvořen",
"Issues": "Úkoly",
"Views": "Zobrazení",
"Active": "Aktivní",
"AllIssues": "Všechny úkoly",
"ActiveIssues": "Aktivní úkoly",
"BacklogIssues": "Návrhy",
"Backlog": "Návrhy",
"Board": "Tabule",
"Components": "Komponenty",
"AllComponents": "Vše",
"BacklogComponents": "Návrhy",
"ActiveComponents": "Aktivní",
"ClosedComponents": "Uzavřené",
"NewComponent": "Nová komponenta",
"CreateComponent": "Vytvořit komponentu",
"ComponentNamePlaceholder": "Název komponenty",
"ComponentDescriptionPlaceholder": "Popis (volitelné)",
"ComponentLead": "Vedoucí",
"ComponentMembers": "Členové",
"StartDate": "Datum zahájení",
"TargetDate": "Cílové datum",
"Planned": "Plánováno",
"InProgress": "Probíhá",
"Paused": "Pozastaveno",
"Completed": "Dokončeno",
"Canceled": "Zrušeno",
"CreateProject": "Vytvořit projekt",
"NewProject": "Nový projekt",
"ProjectTitle": "Název projektu",
"ProjectTitlePlaceholder": "Nový projekt",
"UsedInIssueIDs": "Použito v ID úkolů",
"Identifier": "Identifikátor",
"Import": "Importovat",
"ProjectIdentifier": "Identifikátor projektu",
"IdentifierExists": "Identifikátor projektu již existuje",
"ProjectIdentifierPlaceholder": "PROJ",
"ChooseIcon": "Vybrat ikonu",
"AddIssue": "Přidat úkol",
"NewIssue": "Nový úkol",
"NewIssuePlaceholder": "Nový",
"ResumeDraft": "Pokračovat v konceptu",
"SaveIssue": "Vytvořit úkol",
"SetPriority": "Nastavit prioritu…",
"SetStatus": "Nastavit stav…",
"SelectIssue": "Vybrat úkol",
"Priority": "Priorita",
"NoPriority": "Bez priority",
"Urgent": "Naléhavé",
"High": "Vysoká",
"Medium": "Střední",
"Low": "Nízká",
"Unassigned": "Nepřiřazeno",
"Back": "Zpět",
"List": "Seznam",
"NumberLabels": "{count, plural, =0 {žádné štítky} =1 {1 štítek} other {# štítků}}",
"CategoryBacklog": "Návrhy",
"CategoryUnstarted": "Nezahájeno",
"CategoryStarted": "Zahájeno",
"CategoryCompleted": "Dokončeno",
"CategoryCanceled": "Zrušeno",
"Title": "Název",
"Name": "Jméno",
"Description": "Popis",
"Status": "Stav",
"Number": "Číslo",
"Assignee": "Přiřazený",
"AssignTo": "Přiřadit…",
"AssignedTo": "Přiřazeno k {value}",
"Parent": "Nadřazený úkol",
"SetParent": "Nastavit nadřazený úkol…",
"ChangeParent": "Změnit nadřazený úkol…",
"RemoveParent": "Odebrat nadřazený úkol",
"OpenParent": "Otevřít nadřazený úkol",
"SubIssues": "Podúkoly",
"SubIssuesList": "Podúkoly ({subIssues})",
"OpenSubIssues": "Otevřít podúkoly",
"AddSubIssues": "Přidat podúkol",
"BlockedBy": "Blokováno",
"RelatedTo": "Související s",
"Comments": "Komentáře",
"Attachments": "Přílohy",
"Labels": "Štítky",
"Component": "Komponenta",
"SetDueDate": "Nastavit datum splnění…",
"ChangeDueDate": "Změnit datum splnění…",
"ModificationDate": "Aktualizováno {value}",
"Project": "Projekt",
"Issue": "Úkol",
"SubIssue": "Podúkol",
"Rank": "Hodnost",
"TypeIssuePriority": "Priorita úkolu",
"IssueTitlePlaceholder": "Název úkolu",
"SubIssueTitlePlaceholder": "Název podúkolu",
"IssueDescriptionPlaceholder": "Přidat popis…",
"SubIssueDescriptionPlaceholder": "Přidat popis podúkolu",
"AddIssueTooltip": "Přidat úkol…",
"Grouping": "Seskupení",
"Ordering": "Řazení",
"CompletedIssues": "Dokončené úkoly",
"NoGrouping": "Bez seskupení",
"NoAssignee": "Bez přiřazení",
"LastUpdated": "Poslední aktualizace",
"DueDate": "Datum splnění",
"IssueStartDate": "Datum zahájení",
"GanttDependency": "Dependency",
"GanttLag": "Lag",
"Manual": "Manuální",
"All": "Vše",
"PastWeek": "Minulý týden",
"PastMonth": "Minulý měsíc",
"CopyIssueUrl": "Zkopírovat URL úkolu do schránky",
"CopyIssueId": "Zkopírovat ID úkolu do schránky",
"CopyIssueBranch": "Zkopírovat název větve Git do schránky",
"CopyIssueTitle": "Zkopírovat název úkolu do schránky",
"AssetLabel": "Mějte přehled",
"AddToComponent": "Přidat do komponenty…",
"MoveToComponent": "Přesunout do komponenty…",
"NoComponent": "Bez komponenty",
"ComponentLeadTitle": "Vedoucí komponenty",
"ComponentMembersTitle": "Členové komponenty",
"ComponentLeadSearchPlaceholder": "Nastavit vedoucího komponenty…",
"ComponentMembersSearchPlaceholder": "Změnit členy komponenty…",
"MoveToProject": "Přesunout do projektu",
"Duplicate": "Duplikovat",
"GotoIssues": "Přejít na úkoly",
"GotoActive": "Přejít na aktivní úkoly",
"GotoBacklog": "Přejít na návrhy",
"GotoComponents": "Přejít na komponenty",
"GotoMyIssues": "Přejít na mé úkoly",
"GotoTrackerApplication": "Přepnout na aplikaci Přehled",
"CreatedOne": "Vytvořeno",
"MoveIssues": "Přesunout úkoly",
"MoveIssuesDescription": "Vyberte projekt, do kterého chcete úkoly přesunout",
"ManageAttributes": "Spravovat atributy",
"KeepOriginalAttributes": "Zachovat původní atributy",
"KeepOriginalAttributesTooltip": "Původní stavy a komponenty úkolů budou zachovány v novém projektu",
"SelectReplacement": "Následující položky nejsou dostupné v novém projektu. Vyberte náhradu.",
"MissingItem": "CHYBĚJÍCÍ POLOŽKA",
"Replacement": "NÁHRADA",
"Original": "PŮVODNÍ",
"OriginalDescription": "Položky z této sekce budou vytvořeny v novém projektu",
"Relations": "Vztahy",
"RemoveRelation": "Odebrat vztah...",
"AddBlockedBy": "Označit jako blokováno...",
"AddIsBlocking": "Označit jako blokující...",
"AddRelatedIssue": "Odkázat na jiný úkol...",
"RelatedIssue": "Související úkol {id} - {title}",
"BlockedIssue": "Blokovaný úkol {id} - {title}",
"BlockingIssue": "Blokující úkol {id} - {title}",
"BlockedBySearchPlaceholder": "Vyhledat úkol pro označení jako blokováno...",
"IsBlockingSearchPlaceholder": "Vyhledat úkol pro označení jako blokující...",
"RelatedIssueSearchPlaceholder": "Vyhledat úkol pro odkazování...",
"Blocks": "Blokuje",
"Related": "Související",
"RelatedIssues": "Související úkoly",
"EditIssue": "Upravit {title}",
"EditWorkflowStatuses": "Upravit stavy úkolů",
"EditProject": "Upravit projekt",
"DeleteProject": "Smazat projekt",
"ArchiveProjectName": "Archivovat projekt {name}?",
"ArchiveProjectConfirm": "Chcete tento projekt archivovat?",
"DeleteProjectConfirm": "Chcete tento projekt a všechny jeho úkoly smazat?",
"ProjectHasIssues": "Tento projekt obsahuje úkoly. Opravdu jej chcete archivovat?",
"ManageWorkflowStatuses": "Spravovat typy projektů",
"AddWorkflowStatus": "Přidat stav úkolu",
"EditWorkflowStatus": "Upravit stav úkolu",
"DeleteWorkflowStatus": "Smazat stav úkolu",
"DeleteWorkflowStatusConfirm": "Chcete smazat stav \"{status}\"?",
"DeleteWorkflowStatusErrorDescription": "Stav \"{status}\" má přiřazeno {count, plural, =1 {1 úkol} other {# úkolů}}. Vyberte stav pro přesun",
"Save": "Uložit",
"IncludeItemsThatMatch": "Zahrnout položky, které odpovídají",
"AnyFilter": "jakémukoli filtru",
"AllFilters": "všem filtrům",
"NoDescription": "Žádný popis",
"SearchIssue": "Hledat úkol...",
"StatusHistory": "Historie stavů",
"NewSubIssue": "Přidat podúkol...",
"AddLabel": "Přidat štítek",
"DeleteIssue": "Smazat {issueCount, plural, =1 {úkol} other {# úkolů}}",
"DeleteIssueConfirm": "Chcete smazat {issueCount, plural, =1 {úkol} other {úkoly}}{subIssueCount, plural, =0 {?} =1 { a podúkol?} other { a podúkoly?}}",
"Milestone": "Milník",
"NoMilestone": "Žádný milník",
"MoveToMilestone": "Vybrat milník",
"Milestones": "Milníky",
"AllMilestones": "Vše",
"PlannedMilestones": "Plánované",
"ActiveMilestones": "Aktivní",
"ClosedMilestones": "Dokončené",
"AddToMilestone": "Přidat do milníku",
"MilestoneNamePlaceholder": "Název milníku",
"NewMilestone": "Nový milník",
"CreateMilestone": "Vytvořit",
"MoveAndDeleteMilestone": "Přesunout úkoly do {newMilestone} a smazat {deleteMilestone}",
"MoveAndDeleteMilestoneConfirm": "Chcete smazat milník a přesunout úkoly do jiného milníku?",
"Estimation": "Odhad",
"ReportedTime": "Strávený čas",
"RemainingTime": "Zbývající čas",
"TimeSpendReports": "Zprávy o stráveném čase",
"TimeSpendReport": "Čas",
"TimeSpendReportAdd": "Přidat zprávu o čase",
"TimeSpendReportDate": "Datum",
"TimeSpendReportValue": "Strávený čas",
"TimeSpendReportValueTooltip": "Strávený čas v hodinách",
"TimeSpendReportDescription": "Popis",
"TimeSpendDays": "{value}d",
"TimeSpendHours": "{value}h",
"TimeSpendMinutes": "{value}m",
"ChildEstimation": "Odhad podúkolů",
"ChildReportedTime": "Čas podúkolů",
"CapacityValue": "z {value}d",
"NewRelatedIssue": "Nový související úkol",
"RelatedIssuesNotFound": "Související úkoly nenalezeny",
"AddedReference": "Přidán odkaz",
"AddedAsBlocked": "Označeno jako blokované",
"AddedAsBlocking": "Označeno jako blokující",
"IssueTemplate": "Šablona",
"IssueTemplates": "Šablony",
"NewProcess": "Nová šablona",
"SaveProcess": "Uložit šablonu",
"NoIssueTemplate": "Žádná šablona",
"TemplateReplace": "Chcete použít novou šablonu?",
"TemplateReplaceConfirm": "Všechna pole budou přepsána hodnotami nové šablony",
"Apply": "Použít",
"CurrentWorkDay": "Aktuální pracovní den",
"PreviousWorkDay": "Předchozí pracovní den",
"TimeReportDayTypeLabel": "Vyberte typ pracovního dne",
"DefaultAssignee": "Výchozí přiřazení úkolů",
"SevenHoursLength": "Sedm hodin",
"EightHoursLength": "Osm hodin",
"HourLabel": "h",
"MinuteLabel": "m",
"Saved": "Uloženo...",
"CreatedIssue": "Úkol vytvořen",
"CreatedSubIssue": "Podúkol vytvořen",
"ChangeStatus": "Změnit stav",
"ConfigLabel": "Přehled",
"ConfigDescription": "Rozšíření pro správu pracovních úkolů a projektů.",
"NoStatusFound": "Nebyl nalezen odpovídající stav",
"CreateMissingStatus": "Vytvořit chybějící stav",
"UnsetParent": "Nadřazený úkol bude odebrán",
"AllProjects": "Všechny projekty",
"IssueNotificationTitle": "{issueTitle}",
"IssueNotificationBody": "Aktualizováno uživatelem {senderName}",
"IssueNotificationChanged": "{senderName} změnil {property}",
"IssueNotificationChangedProperty": "{senderName} změnil {property} na \"{newValue}\"",
"IssueNotificationMessage": "{senderName}: {message}",
"PreviousAssigned": "Původně přiřazeno",
"IssueAssignedToYou": "Přiřazeno vám",
"RelatedIssueTargetDescription": "Cílový projekt pro související úkol",
"MapRelatedIssues": "Nastavit výchozí projekty pro související úkoly",
"DefaultIssueStatus": "Výchozí stav úkolu",
"IssueStatus": "Stav",
"Extensions": "Rozšíření",
"UnsetParentIssue": "Odebrat nadřazený úkol",
"ForbidCreateProjectPermission": "Zakázat vytvoření projektu",
"ForbidCreateProjectPermissionDescription": "Zakazuje uživatelům vytvářet nové projekty",
"AllowCreatingIssues": "Povolit vytváření úkolů",
"ModeSelectorDisabledByFilter": "Stav je řízen aktivním filtrem. Chcete-li použít tuto zkratku, odstraňte filtr stavu.",
"ShowQuickModeSelector": "Rychlý filtr: Vše / Aktivní / Návrhy",
"SearchScopeLabel": "Hledat v…",
"SearchScopeTitle": "Pouze název",
"SearchScopeTitleDescription": "Název + popis",
"SearchScopeAll": "Název + popis + komentáře",
"SearchHighlight": "Zvýraznit shody hledání",
"SearchEmptyTitle": "Pro „{query}\" nebyly nalezeny žádné úkoly",
"SearchEmptyActiveFilters": "Aktivní filtry: {filters}",
"SearchEmptyClearFilters": "Hledat bez filtrů",
"SearchEmptyAllProjects": "Hledat ve všech projektech"
},
"status": {}
}