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
14 KiB
JSON
294 lines
14 KiB
JSON
{
|
|
"string": {
|
|
"TrackerApplication": "트래커",
|
|
"Projects": "내 프로젝트",
|
|
"More": "더 보기",
|
|
"Default": "기본값",
|
|
"MakeDefault": "기본값으로 설정",
|
|
"Delete": "삭제",
|
|
"Open": "열기",
|
|
"Members": "멤버",
|
|
"Inbox": "수신함",
|
|
"MyIssues": "내 이슈",
|
|
"ViewIssue": "이슈 보기",
|
|
"IssueCreated": "이슈가 생성되었습니다",
|
|
"Issues": "이슈",
|
|
"Views": "뷰",
|
|
"Active": "활성",
|
|
"AllIssues": "모든 이슈",
|
|
"ActiveIssues": "활성 이슈",
|
|
"BacklogIssues": "백로그",
|
|
"Backlog": "백로그",
|
|
"Board": "보드",
|
|
"Components": "컴포넌트",
|
|
"AllComponents": "전체",
|
|
"BacklogComponents": "백로그",
|
|
"ActiveComponents": "활성",
|
|
"ClosedComponents": "완료",
|
|
"NewComponent": "새 컴포넌트",
|
|
"CreateComponent": "컴포넌트 생성",
|
|
"ComponentNamePlaceholder": "컴포넌트 이름",
|
|
"ComponentDescriptionPlaceholder": "설명 (선택)",
|
|
"ComponentLead": "리더",
|
|
"ComponentMembers": "멤버",
|
|
"StartDate": "시작일",
|
|
"TargetDate": "목표일",
|
|
"Planned": "계획됨",
|
|
"InProgress": "진행 중",
|
|
"Paused": "일시 중지",
|
|
"Completed": "완료",
|
|
"Canceled": "취소됨",
|
|
"CreateProject": "프로젝트 생성",
|
|
"NewProject": "새 프로젝트",
|
|
"ProjectTitle": "프로젝트 제목",
|
|
"ProjectTitlePlaceholder": "새 프로젝트",
|
|
"UsedInIssueIDs": "이슈 ID에 사용됨",
|
|
"Identifier": "식별자",
|
|
"Import": "가져오기",
|
|
"ProjectIdentifier": "프로젝트 식별자",
|
|
"IdentifierExists": "이미 존재하는 프로젝트 식별자입니다",
|
|
"ProjectIdentifierPlaceholder": "PRJCT",
|
|
"ChooseIcon": "아이콘 선택",
|
|
"AddIssue": "이슈 추가",
|
|
"NewIssue": "새 이슈",
|
|
"NewIssuePlaceholder": "새로 만들기",
|
|
"ResumeDraft": "초안 이어서 작성",
|
|
"SaveIssue": "이슈 생성",
|
|
"SetPriority": "우선순위 설정…",
|
|
"SetStatus": "상태 설정…",
|
|
"SelectIssue": "이슈 선택",
|
|
"Priority": "우선순위",
|
|
"NoPriority": "우선순위 없음",
|
|
"Urgent": "긴급",
|
|
"High": "높음",
|
|
"Medium": "보통",
|
|
"Low": "낮음",
|
|
"Unassigned": "미할당",
|
|
"Back": "뒤로",
|
|
"List": "목록",
|
|
"NumberLabels": "{count, plural, =0 {라벨 없음} =1 {라벨 1개} other {라벨 #개}}",
|
|
"CategoryBacklog": "백로그",
|
|
"CategoryUnstarted": "미착수",
|
|
"CategoryStarted": "진행 중",
|
|
"CategoryCompleted": "완료",
|
|
"CategoryCanceled": "취소됨",
|
|
"Title": "제목",
|
|
"Name": "이름",
|
|
"Description": "설명",
|
|
"Status": "상태",
|
|
"Number": "번호",
|
|
"Assignee": "담당자",
|
|
"AssignTo": "담당자 지정...",
|
|
"AssignedTo": "{value}에게 할당됨",
|
|
"Parent": "상위 이슈",
|
|
"SetParent": "상위 이슈 설정…",
|
|
"ChangeParent": "상위 이슈 변경…",
|
|
"RemoveParent": "상위 이슈 제거",
|
|
"OpenParent": "상위 이슈 열기",
|
|
"SubIssues": "하위 이슈",
|
|
"SubIssuesList": "하위 이슈 ({subIssues})",
|
|
"OpenSubIssues": "하위 이슈 열기",
|
|
"AddSubIssues": "하위 이슈 추가",
|
|
"BlockedBy": "차단됨",
|
|
"RelatedTo": "관련",
|
|
"Comments": "댓글",
|
|
"Attachments": "첨부 파일",
|
|
"Labels": "라벨",
|
|
"Component": "컴포넌트",
|
|
"Space": "",
|
|
"SetDueDate": "마감일 설정…",
|
|
"ChangeDueDate": "마감일 변경…",
|
|
"ModificationDate": "{value} 업데이트",
|
|
"Project": "프로젝트",
|
|
"Issue": "이슈",
|
|
"SubIssue": "하위 이슈",
|
|
"Document": "",
|
|
"DocumentIcon": "",
|
|
"DocumentColor": "",
|
|
"Rank": "순위",
|
|
"TypeIssuePriority": "이슈 우선순위",
|
|
"IssueTitlePlaceholder": "이슈 제목",
|
|
"SubIssueTitlePlaceholder": "하위 이슈 제목",
|
|
"IssueDescriptionPlaceholder": "설명 추가…",
|
|
"SubIssueDescriptionPlaceholder": "하위 이슈 설명 추가",
|
|
"AddIssueTooltip": "이슈 추가...",
|
|
"NewIssueDialogClose": "이 대화 상자를 닫으시겠습니까?",
|
|
"NewIssueDialogCloseNote": "모든 변경 사항이 손실됩니다",
|
|
"RemoveComponentDialogClose": "컴포넌트를 삭제하시겠습니까?",
|
|
"RemoveComponentDialogCloseNote": "이 컴포넌트를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다",
|
|
"Grouping": "그룹화",
|
|
"Ordering": "정렬",
|
|
"CompletedIssues": "완료된 이슈",
|
|
"NoGrouping": "그룹화 없음",
|
|
"NoAssignee": "담당자 없음",
|
|
"LastUpdated": "최근 업데이트",
|
|
"DueDate": "마감일",
|
|
"IssueStartDate": "시작일",
|
|
"GanttDependency": "Dependency",
|
|
"GanttLag": "Lag",
|
|
"Manual": "수동",
|
|
"All": "전체",
|
|
"PastWeek": "지난주",
|
|
"PastMonth": "지난달",
|
|
"CopyIssueUrl": "이슈 URL 복사",
|
|
"CopyIssueId": "이슈 ID 복사",
|
|
"CopyIssueBranch": "Git 브랜치 이름 복사",
|
|
"CopyIssueTitle": "이슈 제목 복사",
|
|
"AssetLabel": "자산",
|
|
"AddToComponent": "컴포넌트에 추가…",
|
|
"MoveToComponent": "컴포넌트로 이동…",
|
|
"NoComponent": "컴포넌트 없음",
|
|
"ComponentLeadTitle": "컴포넌트 리더",
|
|
"ComponentMembersTitle": "컴포넌트 멤버",
|
|
"ComponentLeadSearchPlaceholder": "컴포넌트 리더 설정…",
|
|
"ComponentMembersSearchPlaceholder": "컴포넌트 멤버 변경…",
|
|
"MoveToProject": "프로젝트로 이동",
|
|
"Duplicate": "복제",
|
|
"GotoIssues": "이슈로 이동",
|
|
"GotoActive": "활성 이슈로 이동",
|
|
"GotoBacklog": "백로그로 이동",
|
|
"GotoComponents": "컴포넌트로 이동",
|
|
"GotoMyIssues": "내 이슈로 이동",
|
|
"GotoTrackerApplication": "트래커로 전환",
|
|
"CreatedOne": "생성됨",
|
|
"MoveIssues": "이슈 이동",
|
|
"MoveIssuesDescription": "이슈를 이동할 프로젝트를 선택하세요",
|
|
"ManageAttributes": "속성 관리",
|
|
"KeepOriginalAttributes": "원래 속성 유지",
|
|
"KeepOriginalAttributesTooltip": "원래 이슈 상태와 컴포넌트가 새 프로젝트에 유지됨",
|
|
"SelectReplacement": "다음 항목은 새 프로젝트에서 사용할 수 없습니다. 대체 항목을 선택하세요.",
|
|
"MissingItem": "누락된 항목",
|
|
"Replacement": "대체",
|
|
"Original": "원본",
|
|
"OriginalDescription": "이 섹션의 항목은 새 프로젝트에 생성됩니다",
|
|
"Relations": "관계",
|
|
"RemoveRelation": "관계 제거...",
|
|
"AddBlockedBy": "차단됨으로 표시...",
|
|
"AddIsBlocking": "차단 중으로 표시...",
|
|
"AddRelatedIssue": "다른 이슈 참조...",
|
|
"RelatedIssue": "관련 이슈 {id} - {title}",
|
|
"BlockedIssue": "차단된 이슈 {id} - {title}",
|
|
"BlockingIssue": "차단 중인 이슈 {id} - {title}",
|
|
"BlockedBySearchPlaceholder": "차단 원인으로 표시할 이슈 검색...",
|
|
"IsBlockingSearchPlaceholder": "차단 중으로 표시할 이슈 검색...",
|
|
"RelatedIssueSearchPlaceholder": "참조할 이슈 검색...",
|
|
"Blocks": "차단 중",
|
|
"Related": "관련 이슈",
|
|
"RelatedIssues": "관련 이슈",
|
|
"EditIssue": "{title} 편집",
|
|
"EditWorkflowStatuses": "이슈 상태 편집",
|
|
"EditProject": "프로젝트 편집",
|
|
"DeleteProject": "프로젝트 삭제",
|
|
"ArchiveProjectName": "{name} 프로젝트를 보관하시겠습니까?",
|
|
"ArchiveProjectConfirm": "이 프로젝트를 보관하시겠습니까?",
|
|
"DeleteProjectConfirm": "이 프로젝트와 모든 이슈를 삭제하시겠습니까?",
|
|
"ProjectHasIssues": "이 프로젝트에는 기존 이슈가 있습니다. 보관하시겠습니까?",
|
|
"ManageWorkflowStatuses": "프로젝트 유형 관리",
|
|
"AddWorkflowStatus": "이슈 상태 추가",
|
|
"EditWorkflowStatus": "이슈 상태 편집",
|
|
"DeleteWorkflowStatus": "이슈 상태 삭제",
|
|
"DeleteWorkflowStatusConfirm": "\"{status}\" 상태를 삭제하시겠습니까?",
|
|
"DeleteWorkflowStatusErrorDescription": "\"{status}\" 상태에 {count, plural, =1 {이슈 1개} other {이슈 #개}}가 할당되어 있습니다. 이동할 상태를 선택하세요",
|
|
"Save": "저장",
|
|
"IncludeItemsThatMatch": "일치하는 항목 포함",
|
|
"AnyFilter": "필터 중 하나",
|
|
"AllFilters": "모든 필터",
|
|
"NoDescription": "설명 없음",
|
|
"SearchIssue": "작업 검색...",
|
|
"StatusHistory": "상태 이력",
|
|
"NewSubIssue": "하위 이슈 추가...",
|
|
"AddLabel": "라벨 추가",
|
|
"DeleteIssue": "{issueCount, plural, =1 {이슈} other {이슈 #개}} 삭제",
|
|
"DeleteIssueConfirm": "{issueCount, plural, =1 {이슈} other {이슈}}{subIssueCount, plural, =0 {} =1 {와 하위 이슈} other {와 하위 이슈}}를 삭제하시겠습니까?",
|
|
"Milestone": "마일스톤",
|
|
"NoMilestone": "마일스톤 없음",
|
|
"MoveToMilestone": "마일스톤 선택",
|
|
"Milestones": "마일스톤",
|
|
"AllMilestones": "전체",
|
|
"PlannedMilestones": "계획됨",
|
|
"ActiveMilestones": "활성",
|
|
"ClosedMilestones": "완료",
|
|
"AddToMilestone": "마일스톤에 추가",
|
|
"MilestoneNamePlaceholder": "마일스톤 이름",
|
|
"NewMilestone": "새 마일스톤",
|
|
"CreateMilestone": "생성",
|
|
"MoveAndDeleteMilestone": "이슈를 {newMilestone}(으)로 이동하고 {deleteMilestone} 삭제",
|
|
"MoveAndDeleteMilestoneConfirm": "마일스톤을 삭제하고 이슈를 다른 마일스톤으로 이동하시겠습니까?",
|
|
"Estimation": "예상 소요 시간",
|
|
"ReportedTime": "사용 시간",
|
|
"RemainingTime": "남은 시간",
|
|
"TimeSpendReports": "시간 사용 보고서",
|
|
"TimeSpendReport": "시간",
|
|
"TimeSpendReportAdd": "시간 보고서 추가",
|
|
"TimeSpendReportDate": "날짜",
|
|
"TimeSpendReportValue": "사용 시간",
|
|
"TimeSpendReportValueTooltip": "사용 시간(시간 단위)",
|
|
"TimeSpendReportDescription": "설명",
|
|
"TimeSpendDays": "{value}일",
|
|
"TimeSpendHours": "{value}시간",
|
|
"TimeSpendMinutes": "{value}분",
|
|
"ChildEstimation": "하위 이슈 예상치",
|
|
"ChildReportedTime": "하위 이슈 시간",
|
|
"CapacityValue": "{value}일 중",
|
|
"NewRelatedIssue": "새 관련 이슈",
|
|
"RelatedIssuesNotFound": "관련 이슈를 찾을 수 없습니다",
|
|
"AddedReference": "참조 추가됨",
|
|
"AddedAsBlocked": "차단됨으로 표시됨",
|
|
"AddedAsBlocking": "차단 중으로 표시됨",
|
|
"IssueTemplate": "템플릿",
|
|
"IssueTemplates": "템플릿",
|
|
"NewProcess": "새 템플릿",
|
|
"SaveProcess": "템플릿 저장",
|
|
"NoIssueTemplate": "템플릿 없음",
|
|
"TemplateReplace": "새 템플릿을 적용하시겠습니까?",
|
|
"TemplateReplaceConfirm": "모든 필드가 새 템플릿 값으로 덮어쓰여집니다",
|
|
"Apply": "적용",
|
|
"CurrentWorkDay": "현재 영업일",
|
|
"PreviousWorkDay": "이전 영업일",
|
|
"TimeReportDayTypeLabel": "시간 보고서 일자 유형 선택",
|
|
"DefaultAssignee": "이슈 기본 담당자",
|
|
"SevenHoursLength": "7시간",
|
|
"EightHoursLength": "8시간",
|
|
"HourLabel": "시간",
|
|
"MinuteLabel": "분",
|
|
"Saved": "저장됨...",
|
|
"CreatedIssue": "이슈 생성됨",
|
|
"CreatedSubIssue": "하위 이슈 생성됨",
|
|
"ChangeStatus": "상태 변경",
|
|
"ConfigLabel": "트래커",
|
|
"ConfigDescription": "작업 항목을 관리하고 모든 작업을 완료하기 위한 확장 기능입니다.",
|
|
"NoStatusFound": "일치하는 상태를 찾을 수 없습니다",
|
|
"CreateMissingStatus": "누락된 상태 생성",
|
|
"UnsetParent": "상위 이슈 설정이 해제됩니다",
|
|
"AllProjects": "모든 프로젝트",
|
|
"IssueNotificationTitle": "{issueTitle}",
|
|
"IssueNotificationBody": "{senderName}님이 업데이트했습니다",
|
|
"IssueNotificationChanged": "{senderName}님이 {property}을(를) 변경했습니다",
|
|
"IssueNotificationChangedProperty": "{senderName}님이 {property}을(를) \"{newValue}\"(으)로 변경했습니다",
|
|
"IssueNotificationMessage": "{senderName}: {message}",
|
|
"PreviousAssigned": "이전 담당자",
|
|
"IssueAssignedToYou": "나에게 할당됨",
|
|
"RelatedIssueTargetDescription": "클래스나 스페이스에 대한 관련 이슈의 기본 프로젝트",
|
|
"MapRelatedIssues": "관련 이슈의 기본 프로젝트 구성",
|
|
"DefaultIssueStatus": "기본 이슈 상태",
|
|
"IssueStatus": "상태",
|
|
"Extensions": "확장 기능",
|
|
"UnsetParentIssue": "상위 이슈 설정 해제",
|
|
"ForbidCreateProjectPermission": "프로젝트 생성 금지",
|
|
"ForbidCreateProjectPermissionDescription": "사용자의 새 프로젝트 생성을 금지",
|
|
"AllowCreatingIssues": "이슈 생성 허용",
|
|
"ModeSelectorDisabledByFilter": "상태가 활성 필터로 제어되고 있습니다. 이 단축키를 사용하려면 상태 필터를 제거하세요.",
|
|
"ShowQuickModeSelector": "빠른 필터: 전체 / 활성 / 백로그",
|
|
"SearchScopeLabel": "검색 범위…",
|
|
"SearchScopeTitle": "제목만",
|
|
"SearchScopeTitleDescription": "제목 + 설명",
|
|
"SearchScopeAll": "제목 + 설명 + 댓글",
|
|
"SearchHighlight": "검색어 강조 표시",
|
|
"SearchEmptyTitle": "\"{query}\"에 대한 이슈를 찾을 수 없습니다",
|
|
"SearchEmptyActiveFilters": "활성 필터: {filters}",
|
|
"SearchEmptyClearFilters": "필터 없이 검색",
|
|
"SearchEmptyAllProjects": "모든 프로젝트에서 검색"
|
|
},
|
|
"status": {}
|
|
}
|