mirror of
https://github.com/hcengineering/platform.git
synced 2026-08-22 20:32:24 +02:00
* feat(tracker): add Gantt scheduling schema (startDate + IssueRelation)
Schema-only foundation for the upcoming Gantt-chart view in tracker.
No UI in this PR.
Changes:
- Issue.startDate: Timestamp | null (interface + IssueDraft + @Prop with @Index)
- Milestone.startDate: Timestamp | null (interface + @Prop, reusing the
existing tracker.string.StartDate IntlString)
- New DependencyKind type ('finish-to-start' | 'start-to-start' |
'finish-to-finish' | 'start-to-finish')
- New IssueRelation AttachedDoc class with kind: DependencyKind, signed
lag: number — registered in models/tracker via TIssueRelation
- 7 new IntlString keys: IssueStartDate, GanttDependency,
GanttDependency{FinishToStart,StartToStart,FinishToFinish,StartToFinish},
GanttLag — all 13 locales updated
- Cross-plugin literal updates in importer + github sync to satisfy the new
required Issue.startDate / Milestone.startDate fields:
- packages/importer/src/importer/importer.ts: AttachedData<Issue> literal
- services/github/pod-github/src/sync/issueBase.ts: 'startDate' added to
GithubIssueData Omit list (github sync does not own scheduling)
- services/github/pod-github/src/sync/issues.ts + pullrequests.ts:
AttachedData<Issue|GithubPullRequest> literals
Out of scope (deferred to follow-up PRs):
- UI for Gantt view, drag/resize, dependency editor, critical path
- blockedBy → IssueRelation migration (ships atomically with the writer
redirect in the dependency-UI PR)
- LinkIssues permission (tracker uses forbid-style permissions; needs
maintainer discussion)
- Activity-feed wiring for IssueRelation (needs a producer to test against)
- IssueTemplate.startDate (template propagation semantics undecided)
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
* test(model-tracker): add migrateAddStartDate jest tests
3 tests covering migrateAddStartDate:
- writes startDate=null to Issues in DOMAIN_TASK with the right filter
- writes startDate=null to Milestones in DOMAIN_TRACKER with the right filter
- issues exactly two update calls (one per class)
Follows the MigrationClient mock pattern from
models/chat/src/__tests__/migration.test.ts.
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
* feat(model-tracker): add migrateAddStartDate + wire into trackerOperation
Backfills startDate=null on existing Issues (DOMAIN_TASK) and Milestones
(DOMAIN_TRACKER) so the new schema field has a defined value on every
pre-existing document. Idempotent via the standard tryMigrate state-key
mechanism (state: 'gantt-add-startdate').
Verified domain choices against existing migration helpers:
- migrateIdentifiers / passIdentifierToParentInfo use DOMAIN_TASK for
Issues (lines 145, 161 in this file).
- TMilestone @Model decorator confirms DOMAIN_TRACKER for Milestones
(models/tracker/src/types.ts:372).
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
* feat(tracker): expose Issue.startDate / Milestone.startDate in UI; tighten typing
UI changes (so the new schema fields are actually editable, in chronological
order Start → Due/Target):
- New StartDateEditor.svelte (mirrors DueDateEditor.svelte for startDate)
- ControlPanel: render Start Date row above Due Date row in the issue
side panel; both always-visible (no `!== null` guard) so users can set
them on issues that don't have a date yet
- NewMilestone form: Start Date input above Target Date input
- Milestone list view: Start Date column before Target Date column
- TIssueRelation: tighten interface to `extends AttachedDoc<Issue, 'relations'>`
so attachedTo + collection are statically typed. The model class
re-declares `collection: 'relations'` to match the narrower base.
- Drop 4 unused Dependency-kind IntlString keys (FinishToFinish,
FinishToStart, StartToFinish, StartToStart) — they had no consumer
in PR 1; will be re-introduced in PR 4 (dependency editor).
- Simplify migration.ts comments — drop ageing line-references.
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
* fix(tracker): set explicit @Prop ranks for Milestone date fields
The DocAttributeBar side panel sorts attributes by attr.rank ?? toRank(_id)
(see plugins/view-resources/src/components/ClassAttributeBar.svelte:42-47),
so without explicit ranks the visible order on a Milestone was hash-based
(startDate before Status, breaking the chronological flow the user expects).
Set ranks so the side panel renders Status → Start date → Target date.
Comments and attachments stay where they are (they're collections, filtered
out of the attribute panel by categorizeFields).
Issues are unaffected — the Issue side panel is the custom ControlPanel.svelte
which renders Start date / Due date in explicit slots (see PR 1's UI commit).
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
* fix(tracker-resources): EditMilestone renders Status/Start/Target in body in chronological order
The right-side DocAttributeBar sorts attributes by attr.rank ?? toRank(_id),
giving startDate before status (toRank('startDate') < toRank('status')
lexicographically). Setting an explicit rank via @Prop's third arg did not
propagate through the workspace upgrade for existing Attribute documents
in the model TX log — the rank made it into the bundled txes but the
existing Attribute creation TXes are not replaced on upgrade-workspace.
Pivot: render Status, Start date, Target date in the EditMilestone body
in explicit chronological order, and add 'status', 'startDate', 'targetDate'
to ignoreKeys so they don't appear duplicated in the side panel. This
mirrors how Issue's ControlPanel.svelte handles its date fields.
Reverts the no-op @Prop rank attempt.
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
* fix(fulltext): bump model version to 0.7.423 to match deployed workspaces
The fulltext-pod's compiled model version (baked into bundle/model.json via
common/scripts/version.txt at build time) lags whenever the workspaces have
been migrated to a newer patch but the pod was not rebuilt. In that state the
indexer rejects every incoming Tx with a `wrong version` warning, new issues
silently fail to land in Elasticsearch, and search returns empty results for
any document created after the migration.
Bumping `version.txt` aligns the compiled model with the workspaces. All
future builds (front, transactor, workspace, tool, fulltext) will emit
0.7.423, the indexer accepts the Tx stream again, and the deferred backlog
gets consumed automatically — no manual reindex needed.
This commit is the build-side companion to the schema migration in this
same PR. Without it the fulltext-pod cannot consume the migrated workspace's
Tx events.
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
* chore: apply rush format after develop merge
Resolves the failing formatting check requested by @ArtyomSavchenko in
review of #10851 after the develop branch merge.
Affects three files in our PR scope:
- models/tracker/src/migration.ts: collapse short multi-line client.update call
- plugins/tracker/src/index.ts: inline DependencyKind union + IssueRelation comment
- plugins/tracker-resources/src/components/milestones/EditMilestone.svelte:
reformat inline arrow handlers, move QueryIssuesList block ahead of <style>
No logic changes; deterministic prettier output.
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
* test(tracker): fix milestone page-object selectors after startDate field addition
The Gantt schema PR added Milestone.startDate, which:
1. Adds a second datetime-button to the NewMilestone form pool. The
existing 'div.antiCard-pool button.datetime-button' locator matched
both buttons and tripped Playwright's strict-mode check. Scope the
target-date locator to .last() and add a sibling .first() helper for
the start-date button.
2. Moves Status / Start date / Target date editors from the
auto-generated side panel into EditMilestone's body
(div.dates-row > div.date-cell > span.cell-label + <button>) in
chronological order. The label span no longer has a sibling <div>
wrapping the button — the button is a direct sibling. Switch the
buttonStatus/buttonTargetDate XPath to following-sibling::button[1]
and match the new class="cell-label" span. Add a buttonStartDate
helper for the new editor row.
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
* test(tracker): shift buttonEstimation index after startDate row addition
ControlPanel.svelte (issue side panel) now renders the Start date and
Due date rows unconditionally — pre-PR the Due date row was conditional
on issue.dueDate !== null and the Start date row didn't exist at all.
Both new rows emit a <div><button> pair via DueDatePresenter, which the
existing (//span[text()='Estimation']/../div/button)[3] XPath counts as
extra matches and pushes the Estimation button from the 3rd to the 5th
direct div/button under the popupPanel-body__aside-grid.
Direct div/button order under the grid (document order):
1. CreatedBy (EmployeeBox > UserBox div > Button)
2. Assignee (AssigneeEditor div > Button)
3. Start date (NEW — StartDateEditor > DueDatePresenter div > button.datetime-button)
4. Due date (NEW — DueDateEditor > DueDatePresenter div > button.datetime-button)
5. Estimation (AttributeBarEditor div > Button)
buttonAssignee at [2] is unchanged. textEstimation uses 'following-sibling::div[1]'
(first sibling), which is unaffected by additions earlier in the grid.
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
* chore: apply rush format (prettier compliance for CI)
CI's rush fast-format --branch develop step flagged
tests/sanity/tests/model/tracker/milestones-details-page.ts for a
missing blank line between the buttonTargetDate locator (introduced in
86b1c19ee8) and the next field. Apply the local 'rush format' result.
The two other files CI flagged
(plugins/process-resources/src/components/settings/BindingsEditor.svelte
and ImportSlotsPopup.svelte) were actually upstream changes from PR
#10921 (Fix add tag) that landed after our last develop merge — the
preceding merge of upstream/develop into this branch resolves those
diffs.
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
* fix(tests/tracker): use contains() for cell-label class to survive Svelte CSS scoping
The Svelte 4 compiler appends a scoped `svelte-<hash>` class to every
element matched by a component-local CSS selector. EditMilestone.svelte
styles `.cell-label` locally, so each label span ends up as
`<span class="cell-label svelte-XXXXX">` at runtime, not the bare
`<span class="cell-label">` shipped in source. The previous XPath
locator used strict `@class="cell-label"` and never matched.
Switch buttonStatus / buttonStartDate / buttonTargetDate to the standard
`contains(concat(' ', normalize-space(@class), ' '), ' cell-label ')`
class-match idiom so the locators tolerate the added scoped class.
Verified against the playwright accessibility snapshot from the failed
run (artifact playwright-results, hash 07a8f36b...md): the Status row
renders as a generic with text 'Status' immediately followed by a
button 'In progress' as the next direct sibling, matching the rest of
the XPath.
Fixes 5 milestone.spec.ts failures observed in run 27816114236:
- Create a Milestone (locator timeout on checkIssue → buttonStatus)
- Edit a Milestone (locator timeout on editIssue → buttonStatus.click)
- Delete a Milestone (locator timeout on checkIssue → buttonStatus)
plus their two retries each.
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>
300 lines
11 KiB
JSON
300 lines
11 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": "七小时",
|
||
"EightHoursLength": "八小时",
|
||
"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": "允许创建问题"
|
||
},
|
||
"status": {}
|
||
}
|