diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml
index b33b13524c..089a4a664d 100644
--- a/common/config/rush/pnpm-lock.yaml
+++ b/common/config/rush/pnpm-lock.yaml
@@ -19336,9 +19336,6 @@ importers:
'@hcengineering/core':
specifier: workspace:^0.7.26
version: link:../../foundations/core/packages/core
- '@hcengineering/export':
- specifier: workspace:^0.7.0
- version: link:../export
'@hcengineering/login':
specifier: workspace:^0.7.0
version: link:../login
@@ -21215,6 +21212,12 @@ importers:
../../plugins/export-resources:
dependencies:
+ '@hcengineering/attachment':
+ specifier: workspace:^0.7.0
+ version: link:../attachment
+ '@hcengineering/collaborator-client':
+ specifier: workspace:^0.7.18
+ version: link:../../foundations/core/packages/collaborator-client
'@hcengineering/converter':
specifier: workspace:^0.7.0
version: link:../converter
@@ -21239,6 +21242,12 @@ importers:
'@hcengineering/presentation':
specifier: workspace:^0.7.0
version: link:../../packages/presentation
+ '@hcengineering/text':
+ specifier: workspace:^0.7.19
+ version: link:../../foundations/core/packages/text
+ '@hcengineering/text-editor-resources':
+ specifier: workspace:^0.7.0
+ version: link:../text-editor-resources
'@hcengineering/theme':
specifier: workspace:^0.7.0
version: link:../../packages/theme
diff --git a/foundations/core/packages/text-markdown/src/__tests__/robustness.test.ts b/foundations/core/packages/text-markdown/src/__tests__/robustness.test.ts
new file mode 100644
index 0000000000..d61e05f88e
--- /dev/null
+++ b/foundations/core/packages/text-markdown/src/__tests__/robustness.test.ts
@@ -0,0 +1,306 @@
+//
+// Copyright © 2026 TraceX SAS.
+//
+// Licensed under the PolyForm Shield License 1.0.0 (the "License");
+// you may not use this file except in compliance with the License. You may
+// obtain a copy of the License at https://polyformproject.org/licenses/shield/1.0.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//
+
+// Regression tests for the "Export to Markdown" crash on controlled documents:
+// editor-only node/mark types (QMS inline review comments, notes, highlight,
+// inline files, the drawing board) used to make the whole serializer throw,
+// producing either a failed request or, once caught upstream, no file at all.
+// These tests lock in the fix: known editor-only types degrade gracefully to
+// sensible Markdown, and any *other* unrecognized type is dropped instead of
+// aborting the export.
+//
+// Test fixtures below are plain object literals (not annotated as MarkupNode):
+// MarkupNodeType/MarkupMarkType are real TS enums, so a literal like `type:
+// 'node-uuid'` cannot be assigned directly to a MarkupNode-typed variable.
+// Cast at the call site instead (`markup as MarkupNode`), matching the existing
+// convention in markdown.test.ts.
+
+import { MarkupNode } from '@hcengineering/text-core'
+import { markupToMarkdown } from '..'
+
+const options = { refUrl: 'ref://', imageUrl: 'http://localhost/' }
+
+describe('markupToMarkdown - editor-only / QMS node & mark types', () => {
+ it('does not throw on a QMS inline-review-comment mark (node-uuid) and keeps the text', () => {
+ const markup = {
+ type: 'doc',
+ content: [
+ {
+ type: 'paragraph',
+ content: [
+ {
+ type: 'text',
+ text: 'flagged during review',
+ marks: [{ type: 'node-uuid', attrs: { 'node-uuid': 'abc-123' } }]
+ }
+ ]
+ }
+ ]
+ } as unknown as MarkupNode
+
+ expect(() => markupToMarkdown(markup, options)).not.toThrow()
+ expect(markupToMarkdown(markup, options)).toContain('flagged during review')
+ })
+
+ it('does not throw on a threaded inline-comment mark and keeps the text', () => {
+ const markup = {
+ type: 'doc',
+ content: [
+ {
+ type: 'paragraph',
+ content: [
+ {
+ type: 'text',
+ text: 'commented text',
+ marks: [{ type: 'inline-comment', attrs: { thread: 'xyz' } }]
+ }
+ ]
+ }
+ ]
+ } as unknown as MarkupNode
+
+ expect(markupToMarkdown(markup, options)).toEqual('commented text')
+ })
+
+ it('renders a highlight mark as ...', () => {
+ const markup = {
+ type: 'doc',
+ content: [
+ {
+ type: 'paragraph',
+ content: [
+ {
+ type: 'text',
+ text: 'important',
+ marks: [{ type: 'highlight' }]
+ }
+ ]
+ }
+ ]
+ } as unknown as MarkupNode
+
+ expect(markupToMarkdown(markup, options)).toEqual('important')
+ })
+
+ it('renders a note mark without dropping the underlying text', () => {
+ const markup = {
+ type: 'doc',
+ content: [
+ {
+ type: 'paragraph',
+ content: [
+ {
+ type: 'text',
+ text: 'careful here',
+ marks: [{ type: 'note', attrs: { kind: 'warning', title: 'double-check this value' } }]
+ }
+ ]
+ }
+ ]
+ } as unknown as MarkupNode
+
+ const result = markupToMarkdown(markup, options)
+ expect(result).toContain('careful here')
+ expect(result).toContain('double-check this value')
+ })
+
+ it('renders a note mark with no title without throwing', () => {
+ const markup = {
+ type: 'doc',
+ content: [
+ {
+ type: 'paragraph',
+ content: [
+ {
+ type: 'text',
+ text: 'plain note',
+ marks: [{ type: 'note', attrs: { kind: 'neutral' } }]
+ }
+ ]
+ }
+ ]
+ } as unknown as MarkupNode
+
+ expect(markupToMarkdown(markup, options)).toEqual('plain note')
+ })
+
+ it('renders an inline file attachment as a download link', () => {
+ const markup = {
+ type: 'doc',
+ content: [
+ {
+ type: 'paragraph',
+ content: [
+ {
+ type: 'file',
+ attrs: {
+ 'file-id': 'blob123',
+ 'data-file-name': 'spec.pdf',
+ 'data-file-type': 'application/pdf'
+ }
+ }
+ ]
+ }
+ ]
+ } as unknown as MarkupNode
+
+ const result = markupToMarkdown(markup, options)
+ expect(result).toEqual('[spec.pdf](http://localhost/blob123?file=blob123)')
+ })
+
+ it('renders a drawing board as a placeholder instead of throwing', () => {
+ const markup = {
+ type: 'doc',
+ content: [{ type: 'drawingBoard', attrs: { id: 'board1' } }]
+ } as unknown as MarkupNode
+
+ expect(() => markupToMarkdown(markup, options)).not.toThrow()
+ expect(markupToMarkdown(markup, options)).toContain('[drawing]')
+ })
+})
+
+describe('markupToMarkdown - unknown node/mark fallback', () => {
+ it('does not throw on a completely unrecognized node type and preserves nested text', () => {
+ const markup = {
+ type: 'doc',
+ content: [
+ {
+ type: 'someFutureNodeType',
+ content: [
+ {
+ type: 'paragraph',
+ content: [{ type: 'text', text: 'nested text should survive', marks: [] }]
+ }
+ ]
+ }
+ ]
+ } as unknown as MarkupNode
+
+ expect(() => markupToMarkdown(markup, options)).not.toThrow()
+ expect(markupToMarkdown(markup, options)).toContain('nested text should survive')
+ })
+
+ it('does not throw on a completely unrecognized leaf node type with no content', () => {
+ const markup = {
+ type: 'doc',
+ content: [
+ {
+ type: 'paragraph',
+ content: [
+ { type: 'text', text: 'before ', marks: [] },
+ { type: 'someFutureLeafType', attrs: { foo: 'bar' } },
+ { type: 'text', text: ' after', marks: [] }
+ ]
+ }
+ ]
+ } as unknown as MarkupNode
+
+ expect(() => markupToMarkdown(markup, options)).not.toThrow()
+ const result = markupToMarkdown(markup, options)
+ expect(result).toContain('before')
+ expect(result).toContain('after')
+ })
+
+ it('does not throw on a completely unrecognized mark type and preserves the text', () => {
+ const markup = {
+ type: 'doc',
+ content: [
+ {
+ type: 'paragraph',
+ content: [
+ {
+ type: 'text',
+ text: 'styled by a future mark',
+ marks: [{ type: 'someFutureMarkType', attrs: { color: 'red' } }]
+ }
+ ]
+ }
+ ]
+ } as unknown as MarkupNode
+
+ expect(() => markupToMarkdown(markup, options)).not.toThrow()
+ expect(markupToMarkdown(markup, options)).toEqual('styled by a future mark')
+ })
+
+ it('does not throw when an unknown mark is combined with a known mixable mark', () => {
+ // Regression for the active-marks reorder path, which used to dereference
+ // `this.marks[type].mixable` without checking the mark was recognized.
+ const markup = {
+ type: 'doc',
+ content: [
+ {
+ type: 'paragraph',
+ content: [
+ {
+ type: 'text',
+ text: 'unknown only',
+ marks: [{ type: 'someFutureMarkType' }]
+ },
+ {
+ type: 'text',
+ text: 'unknown and bold',
+ marks: [{ type: 'someFutureMarkType' }, { type: 'bold' }]
+ }
+ ]
+ }
+ ]
+ } as unknown as MarkupNode
+
+ expect(() => markupToMarkdown(markup, options)).not.toThrow()
+ })
+})
+
+describe('markupToMarkdown - full controlled document does not crash on export', () => {
+ it('exports a document mixing QMS review marks, notes, highlight, a file and a drawing board', () => {
+ const markup = {
+ type: 'doc',
+ content: [
+ {
+ type: 'paragraph',
+ content: [
+ { type: 'text', text: 'Reviewer left a comment here: ', marks: [] },
+ { type: 'text', text: 'flagged text', marks: [{ type: 'node-uuid', attrs: { 'node-uuid': 'abc-123' } }] },
+ { type: 'text', text: ' and this is ', marks: [] },
+ { type: 'text', text: 'highlighted', marks: [{ type: 'highlight' }] },
+ { type: 'text', text: ' plus a ', marks: [] },
+ {
+ type: 'text',
+ text: 'note',
+ marks: [{ type: 'note', attrs: { kind: 'warning', title: 'careful here' } }]
+ },
+ { type: 'text', text: ' and a thread ', marks: [] },
+ { type: 'text', text: 'comment', marks: [{ type: 'inline-comment', attrs: { thread: 'xyz' } }] },
+ { type: 'text', text: '.', marks: [] }
+ ]
+ },
+ {
+ type: 'file',
+ attrs: { 'file-id': 'blob123', 'data-file-name': 'spec.pdf', 'data-file-type': 'application/pdf' }
+ },
+ { type: 'drawingBoard', attrs: { id: 'board1' } }
+ ]
+ } as unknown as MarkupNode
+
+ let result = ''
+ expect(() => {
+ result = markupToMarkdown(markup, options)
+ }).not.toThrow()
+
+ // The old behavior was either a thrown exception (surfaced as a failed export) or,
+ // once nothing threw the error handling forward, an empty download. Assert the
+ // export actually produced non-empty, meaningful content instead.
+ expect(result.length).toBeGreaterThan(0)
+ expect(result).toContain('flagged text')
+ expect(result).toContain('highlighted')
+ expect(result).toContain('spec.pdf')
+ })
+})
diff --git a/foundations/core/packages/text-markdown/src/serializer.ts b/foundations/core/packages/text-markdown/src/serializer.ts
index e32921dff1..19ccb24da1 100644
--- a/foundations/core/packages/text-markdown/src/serializer.ts
+++ b/foundations/core/packages/text-markdown/src/serializer.ts
@@ -282,6 +282,25 @@ export const storeNodes: Record = {
// Slashes are escaped to prevent autolink creation
state.write(state.htmlEsc(embedUrl).replace(/\//g, '/'))
state.write('')
+ },
+ file: (state, node) => {
+ // Inline file attachment (FileNode, `file-id` style). Render as a download link,
+ // reusing the same file-id -> URL scheme as the `image` node.
+ const attrs = nodeAttrs(node)
+ const fileId = attrs['file-id']
+ const name = (attrs['data-file-name'] as string) ?? (attrs['data-file-href'] as string) ?? 'file'
+ if (fileId != null) {
+ state.write('[' + state.esc(`${name}`) + '](' + state.imageUrl + `${fileId}` + `?file=${fileId}` + ')')
+ } else if (attrs['data-file-href'] != null) {
+ state.write('[' + state.esc(`${name}`) + '](' + state.esc(`${attrs['data-file-href']}`) + ')')
+ } else {
+ state.write(state.esc(`${name}`))
+ }
+ },
+ drawingBoard: (state, node) => {
+ // Freehand drawing board has no meaningful text representation in Markdown.
+ state.write('*[drawing]*')
+ state.closeBlock(node)
}
}
@@ -436,6 +455,40 @@ export const storeMarks: Record = {
mixable: true,
expelEnclosingWhitespace: false,
escape: true
+ },
+ highlight: {
+ open: '',
+ close: '',
+ mixable: true,
+ expelEnclosingWhitespace: true,
+ escape: true
+ },
+ // QMS/review-only marks below carry no visual formatting of their own (they attach
+ // review metadata - a comment thread id, a note - to a run of text). Passing them
+ // through as no-ops keeps the underlying text intact instead of aborting the export.
+ note: {
+ open: '',
+ close: (state, mark) => {
+ const title = mark.attrs?.title
+ return title !== undefined && title !== null && title !== '' ? ` _(note: ${state.esc(`${title}`)})_` : ''
+ },
+ mixable: false,
+ expelEnclosingWhitespace: false,
+ escape: false
+ },
+ 'node-uuid': {
+ open: '',
+ close: '',
+ mixable: true,
+ expelEnclosingWhitespace: false,
+ escape: false
+ },
+ 'inline-comment': {
+ open: '',
+ close: '',
+ mixable: true,
+ expelEnclosingWhitespace: false,
+ escape: false
}
}
@@ -554,10 +607,18 @@ export class MarkdownState implements IState {
// :: (Node)
// Render the given node as a block.
render (node: MarkupNode, parent: MarkupNode, index: number): void {
- if (this.nodes[node.type] === undefined) {
- throw new Error('Token type `' + node.type + '` not supported by Markdown renderer')
+ const processor = this.nodes[node.type]
+ if (processor === undefined) {
+ // Unknown node type (e.g. an editor-only node not recognized by this serializer).
+ // Rather than aborting the whole export, drop the wrapper and render its children,
+ // if any, so the surrounding document still converts.
+ console.warn(`[text-markdown] Unsupported node type "${node.type}", rendering its content only`)
+ if (nodeContent(node).length > 0) {
+ this.renderContent(node)
+ }
+ return
}
- this.nodes[node.type](this, node, parent, index)
+ processor(this, node, parent, index)
}
// :: (Node)
@@ -571,7 +632,7 @@ export class MarkdownState implements IState {
reorderMixableMark (state: InlineState, mark: MarkupMark, i: number, len: number): void {
for (let j = 0; j < state.active.length; j++) {
const other = state.active[j]
- if (!this.marks[other.type].mixable || this.checkSwitchMarks(i, j, state, mark, other, len)) {
+ if (!(this.marks[other.type]?.mixable ?? false) || this.checkSwitchMarks(i, j, state, mark, other, len)) {
break
}
}
@@ -873,7 +934,10 @@ export class MarkdownState implements IState {
if (value === undefined) {
const info = this.marks[mark.type]
if (info == null) {
- throw new Error(`No info for mark ${mark.type}`)
+ // Unknown mark type - drop the formatting rather than aborting the export;
+ // the underlying text still comes through untouched.
+ console.warn(`[text-markdown] Unsupported mark type "${mark.type}", ignoring`)
+ return ''
}
value = open ? info.open : info.close
}
diff --git a/models/card/src/actions.ts b/models/card/src/actions.ts
index 0260182c10..b8cccd5ba1 100644
--- a/models/card/src/actions.ts
+++ b/models/card/src/actions.ts
@@ -158,6 +158,55 @@ export function createActions (builder: Builder): void {
card.action.ExportTable
)
+ // Export/import of a single card's rich-text `content` (round-tripping through Word/Markdown),
+ // sharing the same popups/logic used for controlled documents. Distinct label from ExportTable
+ // above (that one exports card fields as CSV/JSON) to avoid two ambiguous "Export" menu items.
+ createAction(
+ builder,
+ {
+ action: view.actionImpl.ShowPopup,
+ actionPopup: exportPlugin.component.DocumentExportFormatPopup,
+ actionProps: {
+ component: exportPlugin.component.DocumentExportFormatPopup,
+ element: 'top',
+ fillProps: { _object: 'value' }
+ },
+ label: exportPlugin.string.ExportDocumentContent,
+ icon: exportPlugin.icon.Export,
+ input: 'focus',
+ category: card.category.Card,
+ target: card.class.Card,
+ context: {
+ mode: ['context', 'browser'],
+ group: 'tools'
+ }
+ },
+ card.action.ExportDocumentContent
+ )
+
+ createAction(
+ builder,
+ {
+ action: view.actionImpl.ShowPopup,
+ actionPopup: exportPlugin.component.DocumentImportFormatPopup,
+ actionProps: {
+ component: exportPlugin.component.DocumentImportFormatPopup,
+ element: 'top',
+ fillProps: { _object: 'value' }
+ },
+ label: exportPlugin.string.ImportDocumentContent,
+ icon: exportPlugin.icon.Export,
+ input: 'focus',
+ category: card.category.Card,
+ target: card.class.Card,
+ context: {
+ mode: ['context', 'browser'],
+ group: 'tools'
+ }
+ },
+ card.action.ImportDocumentContent
+ )
+
createAction(builder, {
action: view.actionImpl.ShowPopup,
actionProps: {
diff --git a/models/card/src/plugin.ts b/models/card/src/plugin.ts
index de6638e57c..4fc1813140 100644
--- a/models/card/src/plugin.ts
+++ b/models/card/src/plugin.ts
@@ -41,7 +41,9 @@ export default mergeIds(cardId, card, {
PublicLink: '' as Ref>,
Duplicate: '' as Ref>,
CreateChild: '' as Ref,
- ExportTable: '' as Ref>
+ ExportTable: '' as Ref>,
+ ExportDocumentContent: '' as Ref>,
+ ImportDocumentContent: '' as Ref>
},
category: {
Card: '' as Ref,
diff --git a/models/controlled-documents/src/index.ts b/models/controlled-documents/src/index.ts
index 763490c036..d9ed19de83 100644
--- a/models/controlled-documents/src/index.ts
+++ b/models/controlled-documents/src/index.ts
@@ -518,9 +518,9 @@ export function createModel (builder: Builder): void {
builder,
{
action: view.actionImpl.ShowPopup,
- actionPopup: documents.component.ExportFormatPopup,
+ actionPopup: exportPlugin.component.DocumentExportFormatPopup,
actionProps: {
- component: documents.component.ExportFormatPopup,
+ component: exportPlugin.component.DocumentExportFormatPopup,
element: 'top',
fillProps: { _object: 'value' }
},
@@ -538,9 +538,9 @@ export function createModel (builder: Builder): void {
builder,
{
action: view.actionImpl.ShowPopup,
- actionPopup: documents.component.ImportFormatPopup,
+ actionPopup: exportPlugin.component.DocumentImportFormatPopup,
actionProps: {
- component: documents.component.ImportFormatPopup,
+ component: exportPlugin.component.DocumentImportFormatPopup,
element: 'top',
fillProps: { _object: 'value' }
},
diff --git a/plugins/controlled-documents-assets/lang/cs.json b/plugins/controlled-documents-assets/lang/cs.json
index f3de9cf697..b62454fa61 100644
--- a/plugins/controlled-documents-assets/lang/cs.json
+++ b/plugins/controlled-documents-assets/lang/cs.json
@@ -2,14 +2,6 @@
"string": {
"Export": "Exportovat",
"Import": "Importovat",
- "ImportingDocument": "Import dokumentu",
- "ConvertingDocument": "Převod dokumentu…",
- "ImportingFromWord": "Import z Wordu",
- "ConvertingWordDocument": "Převod dokumentu…",
- "DocumentConverted": "Dokument převeden",
- "ImportFailed": "Import selhal",
- "ReviewImportedChanges": "Zkontrolovat importované změny",
- "Apply": "Použít",
"ExportToWord": "Exportovat do Wordu",
"ImportFromWord": "Importovat z Wordu",
"ID": "ID",
@@ -46,7 +38,6 @@
"Document": "Dokument",
"NewDocumentDialogClose": "Chcete zavřít toto dialogové okno?",
"NewDocumentCloseNote": "Všechny změny budou ztraceny",
- "Cancel": "Zrušit",
"EditorPlaceholder": "Začněte psát...",
"Version": "Verze",
"TemplateVersion": "Verze šablony",
@@ -66,32 +57,24 @@
"Approval": "Schválení",
"Reviewer": "Revizor",
"Approver": "Schvalovatel",
-
"DeleteCategory": "Smazat kategorii?",
"DeleteCategoryHint": "Tuto akci nelze vrátit zpět.",
"DeleteCategoryWarning": "Tuto kategorii nelze smazat, protože se používá.",
-
"Latest": "Aktuální",
"Draft": "Koncept",
-
"Reviewers": "Revizoři",
-
"ViewMode": "Zobrazení",
"EditMode": "Úpravy",
"ComparisonMode": "Porovnání",
-
"Compare": "Porovnat:",
"Against": "Proti:",
"RemovedAttachments": "Odebrané přílohy",
"Restore": "Obnovit",
-
"ComparisonModeNotSupported": "Porovnávací režim není podporován.",
-
"CreateDraft": "Vytvořit koncept",
"SendForApproval": "Odeslat ke schválení",
"SendForReview": "Odeslat k revizi",
"CompleteReview": "Dokončit revizi",
-
"Approve": "Schválit",
"Reject": "Zamítnout",
"ConfirmApproval": "Potvrdit schválení",
@@ -108,7 +91,6 @@
"AddApprovalDescription4": "pokud je plánováno školení, musí mít školení stav 'Vydané'",
"NoApprovalsDescription": "Pro tuto verzi dokumentu nejsou žádná schválení",
"CurrentVersion": "Aktuální verze",
-
"DocumentTemplate": "Šablona",
"DocumentTemplates": "Šablony",
"DocumentCode": "Kód dokumentu",
@@ -129,19 +111,16 @@
"ShowResolved": "Zobrazit vyřešené komentáře",
"Ordering": "Řazení",
"Title": "Název",
-
"Effective": "Účinný",
"Archived": "Archivováno",
"Deleted": "Smazáno",
"MetaAbstract": "Abstrakt",
-
"ContentTab": "Obsah",
"TeamTab": "Tým",
"MetaTab": "Metadata",
"ChangeControlTab": "Řízení změn",
"ReleaseTab": "Vydání",
"HistoryTab": "Historie",
-
"ModificationDate": "Upraveno dne",
"Modified": "Upraveno",
"Owner": "Vlastník",
@@ -149,7 +128,6 @@
"Unassigned": "Nepřiřazeno",
"Untitled": "Bez názvu",
"Copy": "Kopírovat",
-
"AccessWorkarea": "Přístup do pracovní oblasti",
"EffectiveLibrary": "Knihovna účinných dokumentů",
"WorkingLibrary": "Knihovna pracovních dokumentů",
@@ -159,10 +137,8 @@
"ReassignOwnershipToAnotherUser": "Převést vlastnictví na jiného uživatele",
"MakeDocumentEffective": "Učinit dokument účinným",
"CreateDraftQmsTemplates": "Vytvořit koncept QMS šablon",
-
"ChangeControl": "Řízení změn",
"ReviewInterval": "Interval revize",
-
"SelectReviewers": "Vybrat revizory",
"SelectApprovers": "Vybrat schvalovatele",
"RequestsToReviewTheDoc": "žádá vás o revizi dokumentu",
@@ -171,19 +147,15 @@
"Template": "Šablona",
"GeneralInfo": "Obecné informace",
"InProgress": "Probíhá",
-
"EditDescription": "Upravit popis",
"EditGuidance": "Upravit pokyny",
-
"NewDocument": "Nový dokument",
"NewDocumentCategory": "Nová kategorie",
"NewDocumentTemplate": "Nová šablona",
-
"LocationStepTitle": "Umístění",
"TemplateStepTitle": "Šablona",
"InfoStepTitle": "Informace",
"TeamStepTitle": "Tým",
-
"TitleAndDescr": "Název a popis",
"Reason": "Důvod",
"AbstractPlaceholder": "O čem je tento dokument? Kdo ho bude potřebovat a kdy? ...",
@@ -192,17 +164,13 @@
"NewTemplatePlaceholder": "O čem je tato šablona? Popište, jak ji správně používat...",
"CustomReason": "Vlastní důvod",
"ReasonPlaceholder": "Specifikujte důvod...",
-
"EditDocument": "Upravit dokument",
-
"Key": "Klíč",
"CommentsSequence": "Sekvence komentářů",
-
"Email": "Email",
"Password": "Heslo",
"FieldIsEmpty": "{field} je prázdné",
"ValidatingCredentials": "Ověřování přihlašovacích údajů...",
-
"GeneralDocumentation": "Obecná dokumentace",
"TechnicalDocumentation": "Technická dokumentace",
"UnsortedTemplates": "Nezařazené šablony",
@@ -210,39 +178,29 @@
"Projects": "Projekty",
"ExternalSpace": "Prostor projektu",
"DocumentSpaceType": "Typ prostoru dokumentů",
-
"EffectiveImmediately": "Ihned po schválení",
"EffectiveOn": "Platnost od",
-
"PeriodicReviewToBeCompleted": "Periodická revize musí být dokončena do",
"MonthsAfterEffectiveDate": "měsíců od data účinnosti",
"ToBePassedWithin": "Musí být splněno do",
"AttemptsAnd": "pokusů a",
"DaysAfterEffectiveDate": "dní od data účinnosti",
-
"Index": "Index",
"Path": "Cesta",
-
"CreateChildDocument": "Vytvořit podřízený dokument",
"CreateChildTemplate": "Vytvořit podřízenou šablonu",
-
"All": "Vše",
-
"Space": "Prostor",
"SelectParent": "Vyberte nadřazený objekt pro váš dokument",
-
"PrefixInUse": "Tato předpona již používá",
"CodeInUse": "Tento kód již používá",
"ChangeCode": "Změnit kód",
"ChangePrefix": "Změnit předponu",
-
"MarkDocAsDeleted": "Označení dokumentu jako smazaného",
"MarkDocsAsDeleted": "Označení více dokumentů jako smazaných",
"MarkDocAsDeletedConfirm": "Opravdu chcete označit následující dokumenty jako smazané: {titles}?",
-
"ArchiveDocs": "Archivovat {count, plural, =0 {dokument} other {dokumenty}}",
"ArchiveDocsConfirm": "Opravdu chcete archivovat následující dokumenty: {titles}?",
-
"DocumentInHierarchy": "Dokument v hierarchii",
"FirstDraftVersion": "Toto je první konceptová verze dokumentu. Historie zatím není k dispozici.",
"FirstOrNotAvailable": "Toto je první dostupná verze dokumentu. Historie zatím není k dispozici nebo není dostupná.",
@@ -304,26 +262,20 @@
"DeleteDocumentCategoryDescription": "Uděluje uživatelům možnost smazat kategorii dokumentů",
"ConfigLabel": "Řízené dokumenty",
"ConfigDescription": "Rozšíření pro správu řízených dokumentů",
-
"Transfer": "Přenos",
"TransferWarning": "Někteří členové týmu mohou po této akci ztratit možnost prohlížet nebo upravovat tento dokument.",
"TransferDocuments": "Přenos řízených dokumentů",
"TransferDocumentsHint": "Dokumenty, které mají být přeneseny do vybraného prostoru:",
-
"CreateFolder": "Vytvořit novou složku",
"RenameFolder": "Přejmenovat složku",
"CreateChildFolder": "Vytvořit podsložku",
-
"Obsolete": "Zastaralé",
"MakeDocumentObsolete": "Označit jako zastaralé",
"MakeDocumentObsoleteDialog": "Označit {count, plural, one {dokument jako zastaralý} other {dokumenty jako zastaralé}}",
"MakeDocumentObsoleteConfirm": "Opravdu chcete označit následující dokumenty jako zastaralé: {titles}?",
-
"LatestVersionHint": "nejnovější",
-
"CannotDeleteFolder": "Složku nelze smazat",
"CannotDeleteFolderHint": "Před odstraněním složky prosím přesuňte všechny podřízené dokumenty na jiné místo.",
-
"AllDocumentSpaces": "Všechny dokumentové prostory"
},
"controlledDocStates": {
@@ -335,4 +287,4 @@
"Rejected": "Zamítnuto",
"ToReview": "K revizi"
}
-}
\ No newline at end of file
+}
diff --git a/plugins/controlled-documents-assets/lang/de.json b/plugins/controlled-documents-assets/lang/de.json
index df6b969a5b..a98374f6a5 100644
--- a/plugins/controlled-documents-assets/lang/de.json
+++ b/plugins/controlled-documents-assets/lang/de.json
@@ -2,14 +2,6 @@
"string": {
"Export": "Exportieren",
"Import": "Importieren",
- "ImportingDocument": "Dokument wird importiert",
- "ConvertingDocument": "Dokument wird konvertiert…",
- "ImportingFromWord": "Import aus Word",
- "ConvertingWordDocument": "Dokument wird konvertiert…",
- "DocumentConverted": "Dokument konvertiert",
- "ImportFailed": "Import fehlgeschlagen",
- "ReviewImportedChanges": "Importierte Änderungen prüfen",
- "Apply": "Übernehmen",
"ExportToWord": "Nach Word exportieren",
"ImportFromWord": "Aus Word importieren",
"ID": "ID",
@@ -46,7 +38,6 @@
"Document": "Dokument",
"NewDocumentDialogClose": "Möchten Sie diesen Dialog schließen?",
"NewDocumentCloseNote": "Alle Änderungen gehen verloren",
- "Cancel": "Abbrechen",
"EditorPlaceholder": "Tippen Sie, um mit der Bearbeitung zu beginnen...",
"Version": "Version",
"TemplateVersion": "Vorlagenversion",
@@ -67,32 +58,24 @@
"Approval": "Genehmigung",
"Reviewer": "Prüfer",
"Approver": "Genehmiger",
-
"DeleteCategory": "Kategorie löschen?",
"DeleteCategoryHint": "Diese Aktion kann nicht rückgängig gemacht werden",
"DeleteCategoryWarning": "Die Kategorie kann nicht gelöscht werden, da sie in Verwendung ist",
-
"Latest": "Aktuell",
"Draft": "Entwurf",
-
"Reviewers": "Prüfer",
-
"ViewMode": "Ansicht",
"EditMode": "Bearbeitung",
"ComparisonMode": "Vergleich",
-
"Compare": "Vergleichen:",
"Against": "Mit:",
"RemovedAttachments": "Entfernte Anhänge",
"Restore": "Wiederherstellen",
-
"ComparisonModeNotSupported": "Vergleichsmodus wird nicht unterstützt.",
-
"CreateDraft": "Entwurf erstellen",
"SendForApproval": "Zur Genehmigung senden",
"SendForReview": "Zur Prüfung senden",
"CompleteReview": "Prüfung abschließen",
-
"Approve": "Genehmigen",
"Reject": "Ablehnen",
"ConfirmApproval": "Genehmigung bestätigen",
@@ -107,7 +90,6 @@
"AddApprovalDescription4": "wenn Schulung geplant ist, hat die Schulung den Status 'Freigegeben'",
"NoApprovalsDescription": "Es gibt keine Genehmigungen für diese Version des Dokuments",
"CurrentVersion": "Aktuelle Version",
-
"DocumentTemplate": "Vorlage",
"DocumentTemplates": "Vorlagen",
"DocumentCode": "Dokumentencode",
@@ -128,19 +110,16 @@
"ShowResolved": "Gelöste Kommentare anzeigen",
"Ordering": "Sortierung",
"Title": "Titel",
-
"Effective": "Gültig",
"Archived": "Archiviert",
"Deleted": "Gelöscht",
"MetaAbstract": "Zusammenfassung",
-
"ContentTab": "Inhalt",
"TeamTab": "Team",
"MetaTab": "Metadaten",
"ChangeControlTab": "Änderungskontrolle",
"ReleaseTab": "Freigabe",
"HistoryTab": "Historie",
-
"ModificationDate": "Geändert am",
"Modified": "Geändert",
"Owner": "Besitzer",
@@ -148,7 +127,6 @@
"Unassigned": "Nicht zugewiesen",
"Untitled": "Ohne Titel",
"Copy": "Kopie",
-
"AccessWorkarea": "Arbeitsbereich zugreifen",
"EffectiveLibrary": "Gültige Bibliothek",
"WorkingLibrary": "Arbeitsbibliothek",
@@ -158,10 +136,8 @@
"ReassignOwnershipToAnotherUser": "Besitz an anderen Benutzer übertragen",
"MakeDocumentEffective": "Dokument gültig machen",
"CreateDraftQmsTemplates": "QMS-Vorlagenentwürfe erstellen",
-
"ChangeControl": "Änderungskontrolle",
"ReviewInterval": "Prüfungsintervall",
-
"SelectReviewers": "Prüfer auswählen",
"SelectApprovers": "Genehmiger auswählen",
"RequestsToReviewTheDoc": "bittet Sie, das Dokument zu prüfen",
@@ -170,19 +146,15 @@
"Template": "Vorlage",
"GeneralInfo": "Allgemeine Informationen",
"InProgress": "In Bearbeitung",
-
"EditDescription": "Beschreibung bearbeiten",
"EditGuidance": "Anleitung bearbeiten",
-
"NewDocument": "Neues Dokument",
"NewDocumentCategory": "Neue Kategorie",
"NewDocumentTemplate": "Neue Vorlage",
-
"LocationStepTitle": "Standort",
"TemplateStepTitle": "Vorlage",
"InfoStepTitle": "Info",
"TeamStepTitle": "Team",
-
"TitleAndDescr": "Titel und Beschreibung",
"Reason": "Grund",
"AbstractPlaceholder": "Worum geht es in diesem Dokument? Wer wird es wann benötigen? ...",
@@ -191,17 +163,13 @@
"NewTemplatePlaceholder": "Worum geht es in dieser Vorlage? Beschreiben Sie, wie sie richtig verwendet wird...",
"CustomReason": "Benutzerdefiniert",
"ReasonPlaceholder": "Geben Sie den Grund an...",
-
"EditDocument": "Dokument bearbeiten",
-
"Key": "Schlüssel",
"CommentsSequence": "Kommentarreihenfolge",
-
"Email": "E-Mail",
"Password": "Passwort",
"FieldIsEmpty": "{field} ist leer",
"ValidatingCredentials": "Anmeldedaten werden überprüft...",
-
"GeneralDocumentation": "Allgemeine Dokumentation",
"TechnicalDocumentation": "Technische Dokumentation",
"UnsortedTemplates": "Unsortierte Vorlagen",
@@ -209,53 +177,39 @@
"Projects": "Projekte",
"ExternalSpace": "Projektbereich",
"DocumentSpaceType": "Dokumentenbereichstyp",
-
"EffectiveImmediately": "Sofort nach Genehmigung",
"EffectiveOn": "Gültig ab",
-
"PeriodicReviewToBeCompleted": "Regelmäßige Überprüfung muss abgeschlossen sein innerhalb von",
"MonthsAfterEffectiveDate": "Monaten nach dem Gültigkeitsdatum",
"ToBePassedWithin": "Muss bestanden werden innerhalb von",
"AttemptsAnd": "Versuchen und",
"DaysAfterEffectiveDate": "Tagen nach dem Gültigkeitsdatum",
-
"Index": "Index",
"Path": "Pfad",
-
"CreateChildDocument": "Unterdokument erstellen",
"CreateChildTemplate": "Untervorlage erstellen",
-
"All": "Alle",
-
"Space": "Bereich",
"SelectParent": "Wählen Sie das übergeordnete Objekt für Ihr Dokument",
-
"PrefixInUse": "Dieses Präfix wird bereits verwendet von",
"CodeInUse": "Dieser Code wird bereits verwendet von",
"ChangeCode": "Code ändern",
"ChangePrefix": "Präfix ändern",
-
"MarkDocAsDeleted": "Dokument als gelöscht markieren",
"MarkDocsAsDeleted": "Mehrere Dokumente als gelöscht markieren",
"MarkDocAsDeletedConfirm": "Möchten Sie die folgenden Dokumente wirklich als gelöscht markieren: {titles}?",
-
"ArchiveDocs": "{count, plural, =0 {Dokument} other {Dokumente}} archivieren",
"ArchiveDocsConfirm": "Möchten Sie die folgenden Dokumente wirklich archivieren: {titles}?",
-
"DocumentInHierarchy": "Dokument in Hierarchie",
"FirstDraftVersion": "Dies ist die erste Entwurfsversion des Dokuments. Es gibt noch keine Historie.",
"FirstOrNotAvailable": "Dies ist die erste verfügbare Version des Dokuments. Es gibt noch keine Versionshistorie oder sie ist nicht verfügbar.",
-
"EffectiveDocumentLifecycle": "Effektiver Dokumentenlebenszyklus",
-
"ReasonAndImpact": "Grund & Auswirkung",
"ImpactAnalysis": "Auswirkungsanalyse",
"ImpactedDocuments": "Betroffene Dokumente",
-
"CreateDocumentFailed": "Dokument konnte nicht erstellt werden",
"CreateDocumentTemplateFailed": "Vorlage konnte nicht erstellt werden",
"TryAgain": "Bitte versuchen Sie es erneut",
-
"DescribeChanges": "Beschreiben Sie, was geändert wurde...",
"DescribeReason": "Beschreiben Sie, warum es geändert wurde...",
"DescribeImpact": "Hat Auswirkungen auf...",
@@ -280,17 +234,13 @@
"Of": " von ",
"CreatedFromTemplate": "Erstellt aus Vorlage: ",
"UncontrolledCopy": "Unkontrollierte Kopie",
-
"ViewAll": "Alle anzeigen",
"Readonly": "Schreibgeschützt",
-
"NewDocumentSpace": "Neuer Dokumentenbereich",
"EditDocumentSpace": "Dokumentenbereich bearbeiten",
-
"DocSpaceDescriptionPlaceholder": "Beschreiben Sie Ihren Bereich...",
"Members": "Mitglieder",
"CreateOrgSpace": "Organisationsbereich erstellen",
-
"ReviewDocumentPermission": "Dokument prüfen",
"ReviewDocumentDescription": "Gewährt Benutzern die Möglichkeit, ein Dokument zu prüfen",
"ApproveDocumentPermission": "Dokument genehmigen",
@@ -303,7 +253,6 @@
"CreateDocumentDescription": "Gewährt Benutzern die Möglichkeit, ein Dokument zu erstellen",
"UpdateDocumentOwnerPermission": "Dokumentenbesitzer aktualisieren",
"UpdateDocumentOwnerDescription": "Gewährt Benutzern die Möglichkeit, einen Dokumentenbesitzer zu aktualisieren",
-
"CreateDocumentCategoryPermission": "Dokumentenkategorie erstellen",
"CreateDocumentCategoryDescription": "Gewährt Benutzern die Möglichkeit, eine Dokumentenkategorie zu erstellen",
"UpdateDocumentCategoryPermission": "Dokumentenkategorie aktualisieren",
@@ -312,26 +261,20 @@
"DeleteDocumentCategoryDescription": "Gewährt Benutzern die Möglichkeit, eine Dokumentenkategorie zu löschen",
"ConfigLabel": "Kontrollierte Dokumente",
"ConfigDescription": "Erweiterung zur Verwaltung kontrollierter Dokumente",
-
"Transfer": "Übertragung",
"TransferWarning": "Einige Teammitglieder können dieses Dokument nach dieser Aktion möglicherweise nicht mehr anzeigen oder bearbeiten.",
"TransferDocuments": "Übertragung kontrollierter Dokumente",
"TransferDocumentsHint": "Dokumente, die in den ausgewählten Bereich übertragen werden sollen:",
-
"CreateFolder": "Neuen Ordner erstellen",
"RenameFolder": "Ordner umbenennen",
"CreateChildFolder": "Unterordner erstellen",
-
"Obsolete": "Veraltet",
"MakeDocumentObsolete": "Als veraltet markieren",
"MakeDocumentObsoleteDialog": "{count, plural, one {Dokument als veraltet markieren} other {Dokumente als veraltet markieren}}",
"MakeDocumentObsoleteConfirm": "Möchten Sie die folgenden Dokumente wirklich als veraltet markieren: {titles}?",
-
"LatestVersionHint": "neueste",
-
"CannotDeleteFolder": "Der Ordner kann nicht gelöscht werden",
"CannotDeleteFolderHint": "Bitte verschieben Sie alle untergeordneten Dokumente an einen anderen Ort, bevor Sie den Ordner löschen.",
-
"AllDocumentSpaces": "Alle Dokumentbereiche"
},
"controlledDocStates": {
diff --git a/plugins/controlled-documents-assets/lang/en.json b/plugins/controlled-documents-assets/lang/en.json
index d4deae23f6..e33ba4108e 100644
--- a/plugins/controlled-documents-assets/lang/en.json
+++ b/plugins/controlled-documents-assets/lang/en.json
@@ -2,14 +2,6 @@
"string": {
"Export": "Export",
"Import": "Import",
- "ImportingDocument": "Importing document",
- "ConvertingDocument": "Converting document…",
- "ImportingFromWord": "Importing from Word",
- "ConvertingWordDocument": "Converting document…",
- "DocumentConverted": "Document converted",
- "ImportFailed": "Import failed",
- "ReviewImportedChanges": "Review imported changes",
- "Apply": "Apply",
"ExportToWord": "Export to Word",
"ImportFromWord": "Import from Word",
"ID": "ID",
@@ -46,7 +38,6 @@
"Document": "Document",
"NewDocumentDialogClose": "Do you want to close this dialog?",
"NewDocumentCloseNote": "All changes will be lost",
- "Cancel": "Cancel",
"EditorPlaceholder": "type to start editing...",
"Version": "Version",
"TemplateVersion": "Template version",
@@ -67,32 +58,24 @@
"Approval": "Approval",
"Reviewer": "Reviewer",
"Approver": "Approver",
-
"DeleteCategory": "Delete category?",
"DeleteCategoryHint": "That action cannot be undone",
"DeleteCategoryWarning": "The category cannot be deleted because it is in use",
-
"Latest": "Actual",
"Draft": "Draft",
-
"Reviewers": "Reviewers",
-
"ViewMode": "Viewing",
"EditMode": "Editing",
"ComparisonMode": "Comparing",
-
"Compare": "Compare:",
"Against": "Against:",
"RemovedAttachments": "Removed attachments",
"Restore": "Restore",
-
"ComparisonModeNotSupported": "Comparison mode is not supported.",
-
"CreateDraft": "Create Draft",
"SendForApproval": "Send for approval",
"SendForReview": "Send for review",
"CompleteReview": "Complete review",
-
"Approve": "Approve",
"Reject": "Reject",
"ConfirmApproval": "Confirm approval",
@@ -109,7 +92,6 @@
"AddApprovalDescription4": "if training is planned, the training has status 'Released'",
"NoApprovalsDescription": "There are no approvals for this version of document",
"CurrentVersion": "Current version",
-
"DocumentTemplate": "Template",
"DocumentTemplates": "Templates",
"DocumentCode": "Document code",
@@ -130,24 +112,20 @@
"ShowResolved": "Show resolved comments",
"Ordering": "Ordering",
"Title": "Title",
-
"Effective": "Effective",
"Archived": "Archived",
"Deleted": "Deleted",
"MetaAbstract": "Abstract",
-
"Obsolete": "Obsolete",
"MakeDocumentObsolete": "Mark as obsolete",
"MakeDocumentObsoleteDialog": "Mark {count, plural, =0 {document} other {documents}} as obsolete",
"MakeDocumentObsoleteConfirm": "Do you really want to mark the following documents as obsolete: {titles}?",
-
"ContentTab": "Content",
"TeamTab": "Team",
"MetaTab": "Metadata",
"ChangeControlTab": "Change control",
"ReleaseTab": "Release",
"HistoryTab": "History",
-
"ModificationDate": "Modified at",
"Modified": "Modified",
"Owner": "Owner",
@@ -155,7 +133,6 @@
"Unassigned": "Unassigned",
"Untitled": "Untitled",
"Copy": "copy",
-
"AccessWorkarea": "Access Workarea",
"EffectiveLibrary": "Effective library",
"WorkingLibrary": "Working library",
@@ -165,10 +142,8 @@
"ReassignOwnershipToAnotherUser": "Reassign ownership to another user",
"MakeDocumentEffective": "Make document effective",
"CreateDraftQmsTemplates": "Create draft QMS templates",
-
"ChangeControl": "Change Control",
"ReviewInterval": "Review interval",
-
"SelectReviewers": "Select reviewers",
"SelectApprovers": "Select approvers",
"RequestsToReviewTheDoc": "requests you to review the document",
@@ -177,19 +152,15 @@
"Template": "Template",
"GeneralInfo": "General Info",
"InProgress": "In progress",
-
"EditDescription": "Edit description",
"EditGuidance": "Edit guidance",
-
"NewDocument": "New document",
"NewDocumentCategory": "New category",
"NewDocumentTemplate": "New template",
-
"LocationStepTitle": "Location",
"TemplateStepTitle": "Template",
"InfoStepTitle": "Info",
"TeamStepTitle": "Team",
-
"TitleAndDescr": "Title and description",
"Reason": "Reason",
"AbstractPlaceholder": "What is this document about? Who will need it and when? ...",
@@ -198,17 +169,13 @@
"NewTemplatePlaceholder": "What is this template about? Describe how to properly use it...",
"CustomReason": "Custom",
"ReasonPlaceholder": "Specify the reason...",
-
"EditDocument": "Edit document",
-
"Key": "Key",
"CommentsSequence": "Comments sequence",
-
"Email": "Email",
"Password": "Password",
"FieldIsEmpty": "{field} is empty",
"ValidatingCredentials": "Validating credentials...",
-
"GeneralDocumentation": "General documentation",
"TechnicalDocumentation": "Technical documentation",
"UnsortedTemplates": "Unsorted templates",
@@ -216,53 +183,39 @@
"Projects": "Projects",
"ExternalSpace": "Project space",
"DocumentSpaceType": "Documents space type",
-
"EffectiveImmediately": "Immediately upon approval",
"EffectiveOn": "Make effective on",
-
"PeriodicReviewToBeCompleted": "Periodic review to be completed within",
"MonthsAfterEffectiveDate": "months after its effective date",
"ToBePassedWithin": "To be passed within",
"AttemptsAnd": "attempts and",
"DaysAfterEffectiveDate": "days after effective date",
-
"Index": "Index",
"Path": "Path",
-
"CreateChildDocument": "Create child document",
"CreateChildTemplate": "Create child template",
-
"All": "All",
-
"Space": "Space",
"SelectParent": "Select the parent object for your document",
-
"PrefixInUse": "This prefix is already in use by",
"CodeInUse": "This code is already in use by",
"ChangeCode": "Change Code",
"ChangePrefix": "Change Prefix",
-
"MarkDocAsDeleted": "Marking document as deleted",
"MarkDocsAsDeleted": "Marking multiple documents as deleted",
"MarkDocAsDeletedConfirm": "Do you really want to mark the following documents as deleted: {titles}?",
-
"ArchiveDocs": "Archive {count, plural, =0 {document} other {documents}}",
"ArchiveDocsConfirm": "Do you really want to archive the following documents: {titles}?",
-
"DocumentInHierarchy": "Document in hierarchy",
"FirstDraftVersion": "This is the first draft version of the document. There's no history yet.",
"FirstOrNotAvailable": "This is the first available version of the document. There's no history yet or it's not available.",
-
"EffectiveDocumentLifecycle": "Effective document lifecycle",
-
"ReasonAndImpact": "Reason & Impact",
"ImpactAnalysis": "Impact analysis",
"ImpactedDocuments": "Impacted documents",
-
"CreateDocumentFailed": "Failed to create document",
"CreateDocumentTemplateFailed": "Failed to create template",
"TryAgain": "Please try again",
-
"DescribeChanges": "Describe what was changed...",
"DescribeReason": "Describe why it was changed...",
"DescribeImpact": "Has an impact on...",
@@ -287,17 +240,13 @@
"Of": " of ",
"CreatedFromTemplate": "Created from template: ",
"UncontrolledCopy": "Uncontrolled copy",
-
"ViewAll": "View all",
"Readonly": "Readonly",
-
"NewDocumentSpace": "New documents space",
"EditDocumentSpace": "Edit documents space",
-
"DocSpaceDescriptionPlaceholder": "Describe your space...",
"Members": "Members",
"CreateOrgSpace": "Create organisation space",
-
"ReviewDocumentPermission": "Review document",
"ReviewDocumentDescription": "Grants users ability to review a document",
"ApproveDocumentPermission": "Approve document",
@@ -310,7 +259,6 @@
"CreateDocumentDescription": "Grants users ability to create a document",
"UpdateDocumentOwnerPermission": "Update document owner",
"UpdateDocumentOwnerDescription": "Grants users ability to update a document owner",
-
"CreateDocumentCategoryPermission": "Create document category",
"CreateDocumentCategoryDescription": "Grants users ability to create a document category",
"UpdateDocumentCategoryPermission": "Update document category",
@@ -319,21 +267,16 @@
"DeleteDocumentCategoryDescription": "Grants users ability to delete a document category",
"ConfigLabel": "Controlled Documents",
"ConfigDescription": "Extension to manage controlled documents",
-
"Transfer": "Transfer",
"TransferWarning": "Some team members may lose the ability to view or edit this document after this action.",
"TransferDocuments": "Transfer controlled documents",
"TransferDocumentsHint": "Documents to be transferred to the selected space:",
-
"CreateFolder": "Create new folder",
"RenameFolder": "Rename folder",
"CreateChildFolder": "Create child folder",
-
"LatestVersionHint": "latest",
-
"CannotDeleteFolder": "The folder cannot be deleted",
"CannotDeleteFolderHint": "Please move all child documents to another location before deleting the folder.",
-
"AllDocumentSpaces": "All document spaces"
},
"controlledDocStates": {
diff --git a/plugins/controlled-documents-assets/lang/es.json b/plugins/controlled-documents-assets/lang/es.json
index 4edab76044..7a490f1480 100644
--- a/plugins/controlled-documents-assets/lang/es.json
+++ b/plugins/controlled-documents-assets/lang/es.json
@@ -2,14 +2,6 @@
"string": {
"Export": "Exportar",
"Import": "Importar",
- "ImportingDocument": "Importando el documento",
- "ConvertingDocument": "Convirtiendo el documento…",
- "ImportingFromWord": "Importando desde Word",
- "ConvertingWordDocument": "Convirtiendo el documento…",
- "DocumentConverted": "Documento convertido",
- "ImportFailed": "Error de importación",
- "ReviewImportedChanges": "Revisar los cambios importados",
- "Apply": "Aplicar",
"ExportToWord": "Exportar a Word",
"ImportFromWord": "Importar desde Word",
"ID": "ID",
@@ -46,7 +38,6 @@
"Document": "Documento",
"NewDocumentDialogClose": "¿Deseas cerrar este diálogo?",
"NewDocumentCloseNote": "Todos los cambios se perderán",
- "Cancel": "Cancelar",
"EditorPlaceholder": "escribe para comenzar a editar...",
"Version": "Versión",
"TemplateVersion": "Versión de plantilla",
@@ -67,32 +58,24 @@
"Approval": "Aprobación",
"Reviewer": "Revisor",
"Approver": "Aprobador",
-
"DeleteCategory": "¿Eliminar categoría?",
"DeleteCategoryHint": "Esa acción no se puede deshacer",
"DeleteCategoryWarning": "La categoría no se puede eliminar porque está en uso",
-
"Latest": "Actual",
"Draft": "Borrador",
-
"Reviewers": "Revisores",
-
"ViewMode": "Visualizando",
"EditMode": "Editando",
"ComparisonMode": "Comparando",
-
"Compare": "Comparar:",
"Against": "Contra:",
"RemovedAttachments": "Adjuntos eliminados",
"Restore": "Restaurar",
-
"ComparisonModeNotSupported": "El modo de comparación no está soportado.",
-
"CreateDraft": "Crear Borrador",
"SendForApproval": "Enviar para aprobación",
"SendForReview": "Enviar para revisión",
"CompleteReview": "Completar revisión",
-
"Approve": "Aprobar",
"Reject": "Rechazar",
"ConfirmApproval": "Confirmar aprobación",
@@ -109,7 +92,6 @@
"AddApprovalDescription4": "si se planifica capacitación, la capacitación tiene estado 'Publicado'",
"NoApprovalsDescription": "No hay aprobaciones para esta versión del documento",
"CurrentVersion": "Versión actual",
-
"DocumentTemplate": "Plantilla",
"DocumentTemplates": "Plantillas",
"DocumentCode": "Código de documento",
@@ -130,24 +112,20 @@
"ShowResolved": "Mostrar comentarios resueltos",
"Ordering": "Ordenamiento",
"Title": "Título",
-
"Effective": "Efectivo",
"Archived": "Archivado",
"Deleted": "Eliminado",
"MetaAbstract": "Resumen",
-
"Obsolete": "Obsoleto",
"MakeDocumentObsolete": "Marcar como obsoleto",
"MakeDocumentObsoleteDialog": "Marcar {count, plural, =0 {documento} other {documentos}} como obsoleto",
"MakeDocumentObsoleteConfirm": "¿Realmente deseas marcar los siguientes documentos como obsoletos: {titles}?",
-
"ContentTab": "Contenido",
"TeamTab": "Equipo",
"MetaTab": "Metadatos",
"ChangeControlTab": "Control de cambios",
"ReleaseTab": "Publicación",
"HistoryTab": "Historial",
-
"ModificationDate": "Modificado en",
"Modified": "Modificado",
"Owner": "Propietario",
@@ -155,7 +133,6 @@
"Unassigned": "Sin asignar",
"Untitled": "Sin título",
"Copy": "copia",
-
"AccessWorkarea": "Acceder al Área de trabajo",
"EffectiveLibrary": "Biblioteca efectiva",
"WorkingLibrary": "Biblioteca de trabajo",
@@ -165,10 +142,8 @@
"ReassignOwnershipToAnotherUser": "Reasignar propiedad a otro usuario",
"MakeDocumentEffective": "Hacer documento efectivo",
"CreateDraftQmsTemplates": "Crear borradores de plantillas QMS",
-
"ChangeControl": "Control de Cambios",
"ReviewInterval": "Intervalo de revisión",
-
"SelectReviewers": "Seleccionar revisores",
"SelectApprovers": "Seleccionar aprobadores",
"RequestsToReviewTheDoc": "te solicita revisar el documento",
@@ -177,19 +152,15 @@
"Template": "Plantilla",
"GeneralInfo": "Información General",
"InProgress": "En progreso",
-
"EditDescription": "Editar descripción",
"EditGuidance": "Editar guía",
-
"NewDocument": "Nuevo documento",
"NewDocumentCategory": "Nueva categoría",
"NewDocumentTemplate": "Nueva plantilla",
-
"LocationStepTitle": "Ubicación",
"TemplateStepTitle": "Plantilla",
"InfoStepTitle": "Información",
"TeamStepTitle": "Equipo",
-
"TitleAndDescr": "Título y descripción",
"Reason": "Motivo",
"AbstractPlaceholder": "¿De qué trata este documento? ¿Quién lo necesitará y cuándo? ...",
@@ -198,17 +169,13 @@
"NewTemplatePlaceholder": "¿De qué trata esta plantilla? Describe cómo usarla correctamente...",
"CustomReason": "Personalizado",
"ReasonPlaceholder": "Especifica el motivo...",
-
"EditDocument": "Editar documento",
-
"Key": "Clave",
"CommentsSequence": "Secuencia de comentarios",
-
"Email": "Correo electrónico",
"Password": "Contraseña",
"FieldIsEmpty": "{field} está vacío",
"ValidatingCredentials": "Validando credenciales...",
-
"GeneralDocumentation": "Documentación general",
"TechnicalDocumentation": "Documentación técnica",
"UnsortedTemplates": "Plantillas sin clasificar",
@@ -216,53 +183,39 @@
"Projects": "Proyectos",
"ExternalSpace": "Espacio de proyecto",
"DocumentSpaceType": "Tipo de espacio de documentos",
-
"EffectiveImmediately": "Inmediatamente tras la aprobación",
"EffectiveOn": "Hacer efectivo el",
-
"PeriodicReviewToBeCompleted": "Revisión periódica a completar dentro de",
"MonthsAfterEffectiveDate": "meses después de su fecha efectiva",
"ToBePassedWithin": "A completar dentro de",
"AttemptsAnd": "intentos y",
"DaysAfterEffectiveDate": "días después de la fecha efectiva",
-
"Index": "Índice",
"Path": "Ruta",
-
"CreateChildDocument": "Crear documento hijo",
"CreateChildTemplate": "Crear plantilla hija",
-
"All": "Todos",
-
"Space": "Espacio",
"SelectParent": "Selecciona el objeto padre para tu documento",
-
"PrefixInUse": "Este prefijo ya está en uso por",
"CodeInUse": "Este código ya está en uso por",
"ChangeCode": "Cambiar Código",
"ChangePrefix": "Cambiar Prefijo",
-
"MarkDocAsDeleted": "Marcar documento como eliminado",
"MarkDocsAsDeleted": "Marcar múltiples documentos como eliminados",
"MarkDocAsDeletedConfirm": "¿Realmente deseas marcar los siguientes documentos como eliminados: {titles}?",
-
"ArchiveDocs": "Archivar {count, plural, =0 {documento} other {documentos}}",
"ArchiveDocsConfirm": "¿Realmente deseas archivar los siguientes documentos: {titles}?",
-
"DocumentInHierarchy": "Documento en jerarquía",
"FirstDraftVersion": "Esta es la primera versión borrador del documento. Aún no hay historial.",
"FirstOrNotAvailable": "Esta es la primera versión disponible del documento. Aún no hay historial o no está disponible.",
-
"EffectiveDocumentLifecycle": "Ciclo de vida del documento efectivo",
-
"ReasonAndImpact": "Motivo e Impacto",
"ImpactAnalysis": "Análisis de impacto",
"ImpactedDocuments": "Documentos impactados",
-
"CreateDocumentFailed": "Error al crear documento",
"CreateDocumentTemplateFailed": "Error al crear plantilla",
"TryAgain": "Por favor intenta de nuevo",
-
"DescribeChanges": "Describe qué se cambió...",
"DescribeReason": "Describe por qué se cambió...",
"DescribeImpact": "Tiene un impacto en...",
@@ -287,17 +240,13 @@
"Of": " de ",
"CreatedFromTemplate": "Creado desde plantilla: ",
"UncontrolledCopy": "Copia no controlada",
-
"ViewAll": "Ver todo",
"Readonly": "Solo lectura",
-
"NewDocumentSpace": "Nuevo espacio de documentos",
"EditDocumentSpace": "Editar espacio de documentos",
-
"DocSpaceDescriptionPlaceholder": "Describe tu espacio...",
"Members": "Miembros",
"CreateOrgSpace": "Crear espacio de organización",
-
"ReviewDocumentPermission": "Revisar documento",
"ReviewDocumentDescription": "Otorga a los usuarios la capacidad de revisar un documento",
"ApproveDocumentPermission": "Aprobar documento",
@@ -310,7 +259,6 @@
"CreateDocumentDescription": "Otorga a los usuarios la capacidad de crear un documento",
"UpdateDocumentOwnerPermission": "Actualizar propietario del documento",
"UpdateDocumentOwnerDescription": "Otorga a los usuarios la capacidad de actualizar el propietario de un documento",
-
"CreateDocumentCategoryPermission": "Crear categoría de documento",
"CreateDocumentCategoryDescription": "Otorga a los usuarios la capacidad de crear una categoría de documento",
"UpdateDocumentCategoryPermission": "Actualizar categoría de documento",
@@ -319,21 +267,16 @@
"DeleteDocumentCategoryDescription": "Otorga a los usuarios la capacidad de eliminar una categoría de documento",
"ConfigLabel": "Documentos Controlados",
"ConfigDescription": "Extensión para gestionar documentos controlados",
-
"Transfer": "Transferir",
"TransferWarning": "Algunos miembros del equipo pueden perder la capacidad de ver o editar este documento después de esta acción.",
"TransferDocuments": "Transferir documentos controlados",
"TransferDocumentsHint": "Documentos a transferir al espacio seleccionado:",
-
"CreateFolder": "Crear nueva carpeta",
"RenameFolder": "Renombrar carpeta",
"CreateChildFolder": "Crear carpeta hija",
-
"LatestVersionHint": "última",
-
"CannotDeleteFolder": "La carpeta no se puede eliminar",
"CannotDeleteFolderHint": "Por favor mueve todos los documentos hijos a otra ubicación antes de eliminar la carpeta.",
-
"AllDocumentSpaces": "Todos los espacios de documentos"
},
"controlledDocStates": {
@@ -346,4 +289,3 @@
"ToReview": "A Revisar"
}
}
-
diff --git a/plugins/controlled-documents-assets/lang/fr.json b/plugins/controlled-documents-assets/lang/fr.json
index 33e7562dcc..25077d28c1 100644
--- a/plugins/controlled-documents-assets/lang/fr.json
+++ b/plugins/controlled-documents-assets/lang/fr.json
@@ -2,14 +2,6 @@
"string": {
"Export": "Exporter",
"Import": "Importer",
- "ImportingDocument": "Import du document",
- "ConvertingDocument": "Conversion du document…",
- "ImportingFromWord": "Import depuis Word",
- "ConvertingWordDocument": "Conversion du document…",
- "DocumentConverted": "Document converti",
- "ImportFailed": "Échec de l'import",
- "ReviewImportedChanges": "Vérifier les modifications importées",
- "Apply": "Appliquer",
"ExportToWord": "Exporter vers Word",
"ImportFromWord": "Importer depuis Word",
"ID": "ID",
@@ -46,7 +38,6 @@
"Document": "Document",
"NewDocumentDialogClose": "Voulez-vous fermer cette fenêtre ?",
"NewDocumentCloseNote": "Tous les changements seront perdus",
- "Cancel": "Annuler",
"EditorPlaceholder": "tapez pour commencer à éditer...",
"Version": "Version",
"TemplateVersion": "Version du modèle",
@@ -273,26 +264,20 @@
"DeleteDocumentCategoryDescription": "Accorde aux utilisateurs la capacité de supprimer une catégorie de document",
"ConfigLabel": "Documents contrôlés",
"ConfigDescription": "Extension pour gérer les documents contrôlés",
-
"Transfer": "Transfert",
"TransferWarning": "Certains membres de l'équipe peuvent perdre la possibilité de visualiser ou de modifier ce document après cette action.",
"TransferDocuments": "Transférer des documents contrôlés",
"TransferDocumentsHint": "Documents à transférer dans l'espace sélectionné:",
-
"CreateFolder": "Créer un nouveau dossier",
"RenameFolder": "Renommer le dossier",
"CreateChildFolder": "Créer un sous-dossier",
-
"Obsolete": "Obsolète",
"MakeDocumentObsolete": "Marquer comme obsolète",
"MakeDocumentObsoleteDialog": "Marquer {count, plural, one {le document comme obsolète} other {les documents comme obsolètes}}",
"MakeDocumentObsoleteConfirm": "Voulez-vous vraiment marquer les documents suivants comme obsolètes : {titles} ?",
-
"LatestVersionHint": "dernier",
-
"CannotDeleteFolder": "Le dossier ne peut pas être supprimé",
"CannotDeleteFolderHint": "Veuillez déplacer tous les documents enfants vers un autre emplacement avant de supprimer le dossier.",
-
"AllDocumentSpaces": "Tous les espaces de documents"
},
"controlledDocStates": {
@@ -304,4 +289,4 @@
"Rejected": "Rejeté",
"ToReview": "À réviser"
}
-}
\ No newline at end of file
+}
diff --git a/plugins/controlled-documents-assets/lang/it.json b/plugins/controlled-documents-assets/lang/it.json
index 810464ba40..453306f1e3 100644
--- a/plugins/controlled-documents-assets/lang/it.json
+++ b/plugins/controlled-documents-assets/lang/it.json
@@ -2,14 +2,6 @@
"string": {
"Export": "Esporta",
"Import": "Importa",
- "ImportingDocument": "Importazione del documento",
- "ConvertingDocument": "Conversione del documento…",
- "ImportingFromWord": "Importazione da Word",
- "ConvertingWordDocument": "Conversione del documento…",
- "DocumentConverted": "Documento convertito",
- "ImportFailed": "Importazione non riuscita",
- "ReviewImportedChanges": "Rivedi le modifiche importate",
- "Apply": "Applica",
"ExportToWord": "Esporta in Word",
"ImportFromWord": "Importa da Word",
"ID": "ID",
@@ -46,7 +38,6 @@
"Document": "Documento",
"NewDocumentDialogClose": "Vuoi chiudere questo dialogo?",
"NewDocumentCloseNote": "Tutte le modifiche saranno perse",
- "Cancel": "Annulla",
"EditorPlaceholder": "digita per iniziare a modificare...",
"Version": "Versione",
"TemplateVersion": "Versione del modello",
@@ -270,26 +261,20 @@
"DeleteDocumentCategoryDescription": "Concede agli utenti la possibilità di eliminare una categoria di documento",
"ConfigLabel": "Documenti controllati",
"ConfigDescription": "Estensione per gestire documenti controllati",
-
"Transfer": "Trasferimento",
"TransferWarning": "Alcuni membri del team potrebbero perdere la possibilità di visualizzare o modificare il documento dopo questa azione.",
"TransferDocuments": "Trasferimento di documenti controllati",
"TransferDocumentsHint": "Documenti da trasferire nello spazio selezionato:",
-
"CreateFolder": "Crea nuova cartella",
"RenameFolder": "Rinomina cartella",
"CreateChildFolder": "Crea sottocartella",
-
"Obsolete": "Obsoleto",
"MakeDocumentObsolete": "Segna come obsoleto",
"MakeDocumentObsoleteDialog": "Segna {count, plural, one {il documento come obsoleto} other {i documenti come obsoleti}}",
"MakeDocumentObsoleteConfirm": "Vuoi davvero segnare i seguenti documenti come obsoleti: {titles}?",
-
"LatestVersionHint": "ultimo",
-
"CannotDeleteFolder": "Impossibile eliminare la cartella",
"CannotDeleteFolderHint": "Sposta tutti i documenti figli in un'altra posizione prima di eliminare la cartella.",
-
"AllDocumentSpaces": "Tutti gli spazi documenti"
},
"controlledDocStates": {
diff --git a/plugins/controlled-documents-assets/lang/ja.json b/plugins/controlled-documents-assets/lang/ja.json
index 66f1df875b..a0e9b311f0 100644
--- a/plugins/controlled-documents-assets/lang/ja.json
+++ b/plugins/controlled-documents-assets/lang/ja.json
@@ -2,14 +2,6 @@
"string": {
"Export": "エクスポート",
"Import": "インポート",
- "ImportingDocument": "ドキュメントをインポート中",
- "ConvertingDocument": "ドキュメントを変換中…",
- "ImportingFromWord": "Wordからインポート中",
- "ConvertingWordDocument": "ドキュメントを変換中…",
- "DocumentConverted": "ドキュメントを変換しました",
- "ImportFailed": "インポートに失敗しました",
- "ReviewImportedChanges": "インポートした変更を確認",
- "Apply": "適用",
"ExportToWord": "Wordにエクスポート",
"ImportFromWord": "Wordからインポート",
"ID": "ID",
@@ -45,7 +37,6 @@
"Document": "ドキュメント",
"NewDocumentDialogClose": "このダイアログを閉じますか?",
"NewDocumentCloseNote": "すべての変更は失われます",
- "Cancel": "キャンセル",
"EditorPlaceholder": "入力して編集を開始...",
"Version": "バージョン",
"TemplateVersion": "テンプレートバージョン",
diff --git a/plugins/controlled-documents-assets/lang/ko.json b/plugins/controlled-documents-assets/lang/ko.json
index f65cbf5a98..1e0d3c8ce4 100644
--- a/plugins/controlled-documents-assets/lang/ko.json
+++ b/plugins/controlled-documents-assets/lang/ko.json
@@ -1,299 +1,290 @@
{
- "string": {
+ "string": {
"Export": "내보내기",
"Import": "가져오기",
- "ImportingDocument": "문서 가져오는 중",
- "ConvertingDocument": "문서 변환 중…",
- "ImportingFromWord": "Word에서 가져오는 중",
- "ConvertingWordDocument": "문서 변환 중…",
- "DocumentConverted": "문서 변환 완료",
- "ImportFailed": "가져오기 실패",
- "ReviewImportedChanges": "가져온 변경사항 검토",
- "Apply": "적용",
"ExportToWord": "Word로 내보내기",
"ImportFromWord": "Word에서 가져오기",
- "ID": "ID",
- "Code": "코드",
- "Number": "번호",
- "Category": "카테고리",
- "CollaborativeDocument": "공동 편집 문서",
- "ControlledDocument": "관리 문서",
- "Requests": "요청",
- "EffectiveDate": "발효일",
- "PlannedEffectiveDate": "예정 발효일",
- "Rank": "순위",
- "DocumentRequest": "요청",
- "DocumentReviewRequest": "문서 검토 요청",
- "DocumentApprovalRequest": "문서 승인 요청",
- "ControlledStatus": "관리 상태",
- "Categories": "카테고리",
- "Guidance": "안내",
- "Required": "필수",
- "Description": "설명",
- "Major": "메이저",
- "Minor": "마이너",
- "Patch": "패치",
- "ValidationWorkflow": "검증 워크플로",
- "Creator": "생성자",
- "ChangeOwner": "문서 소유자 변경",
- "ChangeOwnerHintBeginning": "",
- "ChangeOwnerHintEnd": "의 소유 권한을 다른 사용자에게 이전합니다.",
- "ChangeOwnerWarning": "이 작업 후에는 이 문서를 편집할 수 없습니다.",
- "SelectOwner": "새 소유자 선택",
- "CreateDocument": "새 문서 생성",
- "CreateTemplate": "새 템플릿 생성",
- "Documents": "문서",
- "Document": "문서",
- "NewDocumentDialogClose": "이 대화 상자를 닫으시겠습니까?",
- "NewDocumentCloseNote": "모든 변경 사항이 손실됩니다",
- "Cancel": "취소",
- "EditorPlaceholder": "입력하여 편집 시작...",
- "Version": "버전",
- "TemplateVersion": "템플릿 버전",
- "VersionValue": "v{major}.{minor}",
- "SearchDocument": "문서 검색...",
- "CreateEnVersion": "검토용 버전 생성",
- "Approvers": "승인자",
- "ExternalApprovers": "외부 승인자",
- "CoAuthors": "공동 작성자",
- "Status": "상태",
- "TemplateName": "템플릿 이름",
- "DocumentApplication": "관리 문서",
- "MyDocuments": "내 문서",
- "Library": "라이브러리",
- "Labels": "라벨",
- "Author": "작성자",
- "Review": "검토",
- "Approval": "승인",
- "Reviewer": "검토자",
- "Approver": "승인자",
- "DeleteCategory": "카테고리를 삭제하시겠습니까?",
- "DeleteCategoryHint": "이 작업은 되돌릴 수 없습니다",
- "DeleteCategoryWarning": "사용 중이므로 카테고리를 삭제할 수 없습니다",
- "Latest": "최신",
- "Draft": "초안",
- "Reviewers": "검토자",
- "ViewMode": "보기 중",
- "EditMode": "편집 중",
- "ComparisonMode": "비교 중",
- "Compare": "비교:",
- "Against": "대상:",
- "RemovedAttachments": "삭제된 첨부 파일",
- "Restore": "복원",
- "ComparisonModeNotSupported": "비교 모드는 지원되지 않습니다.",
- "CreateDraft": "초안 생성",
- "SendForApproval": "승인 요청",
- "SendForReview": "검토 요청",
- "CompleteReview": "검토 완료하기",
- "Approve": "승인",
- "Reject": "반려",
- "ConfirmApproval": "승인 확인",
- "ConfirmRejection": "반려 확인",
- "ProvideRejectionReason": "반려 사유 입력...",
- "RejectionReason": "반려 사유",
- "ConfirmReviewCompletion": "검토 완료 확인",
- "ConfirmApprovalSubmission": "승인 요청 확인",
- "ConfirmReviewSubmission": "검토 요청 확인",
- "AddApprovalTitle": "승인자에게 문서 전송",
- "AddApprovalDescription1": "승인 요청을 위해 문서가 다음 요건을 충족해야 합니다:",
- "AddApprovalDescription2": "상태가 '초안' 또는 '검토 완료'",
- "AddApprovalDescription3": "미해결 댓글 없음",
- "AddApprovalDescription4": "교육훈련이 계획된 경우, 교육훈련 상태가 '릴리스됨'",
- "NoApprovalsDescription": "이 버전의 문서에는 승인 내역이 없습니다",
- "CurrentVersion": "현재 버전",
- "DocumentTemplate": "템플릿",
- "DocumentTemplates": "템플릿",
- "DocumentCode": "문서 코드",
- "TemplateCode": "템플릿 코드",
- "DocumentCodePlaceholder": "DOC-1",
- "DocumentPrefixPlaceholder": "DOC",
- "DocumentPrefix": "문서 접두사",
- "DocumentTemplateCreateLabel": "템플릿",
- "DocumentCategoryCreateLabel": "카테고리",
- "CreateDocumentCategory": "카테고리 생성",
- "DocumentCategoryAlreadyExists": "이미 존재하는 카테고리입니다: \"{title}\". ",
- "DocumentCategoryCodeAlreadyExists": "이미 사용 중인 코드입니다: \"{code}\". ",
- "AttachmentsMax": "허용되는 최대 첨부 파일 수",
- "Resolve": "해결",
- "Unresolve": "미해결",
- "Pending": "대기 중",
- "Resolved": "해결됨",
- "ShowResolved": "해결된 댓글 표시",
- "Ordering": "순서",
- "Title": "제목",
- "Effective": "유효",
- "Archived": "보관됨",
- "Deleted": "삭제됨",
- "MetaAbstract": "개요",
- "Obsolete": "폐기",
- "MakeDocumentObsolete": "폐기로 표시",
- "MakeDocumentObsoleteDialog": "{count, plural, =0 {문서} other {문서}} 폐기로 표시",
- "MakeDocumentObsoleteConfirm": "정말 다음 문서를 폐기로 표시하시겠습니까: {titles}?",
- "ContentTab": "콘텐츠",
- "TeamTab": "팀",
- "MetaTab": "메타데이터",
- "ChangeControlTab": "변경 관리",
- "ReleaseTab": "릴리스",
- "HistoryTab": "이력",
- "ModificationDate": "수정일",
- "Modified": "수정됨",
- "Owner": "소유자",
- "AssignedTo": "담당자",
- "Unassigned": "미할당",
- "Untitled": "제목 없음",
- "Copy": "복사",
- "AccessWorkarea": "작업 영역 접근",
- "EffectiveLibrary": "유효 라이브러리",
- "WorkingLibrary": "작업 라이브러리",
- "CreateDraftQmsDocuments": "QMS 문서 초안 생성",
- "OwnDocumentAskReviewGetApproval": "QMS 문서를 소유하고, 검토를 요청하여 승인 받기",
- "ApproveDocuments": "문서 승인",
- "ReassignOwnershipToAnotherUser": "다른 사용자에게 소유권 재할당",
- "MakeDocumentEffective": "문서 발효 처리",
- "CreateDraftQmsTemplates": "QMS 템플릿 초안 생성",
- "ChangeControl": "변경 관리",
- "ReviewInterval": "검토 주기",
- "SelectReviewers": "검토자 선택",
- "SelectApprovers": "승인자 선택",
- "RequestsToReviewTheDoc": "님이 문서 검토를 요청합니다",
- "RequestsToApproveTheDoc": "님이 문서 승인을 요청합니다",
- "Parent": "상위",
- "Template": "템플릿",
- "GeneralInfo": "기본 정보",
- "InProgress": "진행 중",
- "EditDescription": "설명 편집",
- "EditGuidance": "안내 편집",
- "NewDocument": "새 문서",
- "NewDocumentCategory": "새 카테고리",
- "NewDocumentTemplate": "새 템플릿",
- "LocationStepTitle": "위치",
- "TemplateStepTitle": "템플릿",
- "InfoStepTitle": "정보",
- "TeamStepTitle": "팀",
- "TitleAndDescr": "제목 및 설명",
- "Reason": "사유",
- "AbstractPlaceholder": "이 문서는 어떤 내용인가요? 누가 언제 필요로 하나요? ...",
- "NewDocCreation": "새 문서 생성",
- "NewTemplateCreation": "새 템플릿 생성",
- "NewTemplatePlaceholder": "이 템플릿은 어떤 내용인가요? 올바른 사용 방법을 설명하세요...",
- "CustomReason": "사용자 지정",
- "ReasonPlaceholder": "사유 입력...",
- "EditDocument": "문서 편집",
- "Key": "키",
- "CommentsSequence": "댓글 시퀀스",
- "Email": "이메일",
- "Password": "비밀번호",
- "FieldIsEmpty": "{field}이(가) 비어 있습니다",
- "ValidatingCredentials": "인증 정보 확인 중...",
- "GeneralDocumentation": "사내 문서",
- "TechnicalDocumentation": "기술 문서",
- "UnsortedTemplates": "분류되지 않은 템플릿",
- "Project": "프로젝트",
- "Projects": "프로젝트",
- "ExternalSpace": "프로젝트 스페이스",
- "DocumentSpaceType": "문서 스페이스 유형",
- "EffectiveImmediately": "승인 즉시",
- "EffectiveOn": "발효일 지정",
- "PeriodicReviewToBeCompleted": "정기 검토 완료 기한",
- "MonthsAfterEffectiveDate": "발효일로부터 개월 후",
- "ToBePassedWithin": "통과 기한",
- "AttemptsAnd": "회 시도 및",
- "DaysAfterEffectiveDate": "발효일로부터의 일수",
- "Index": "인덱스",
- "Path": "경로",
- "CreateChildDocument": "하위 문서 생성",
- "CreateChildTemplate": "하위 템플릿 생성",
- "All": "전체",
- "Space": "스페이스",
- "SelectParent": "문서의 상위 객체 선택",
- "PrefixInUse": "이 접두사는 이미 사용 중입니다:",
- "CodeInUse": "이 코드는 이미 사용 중입니다:",
- "ChangeCode": "코드 변경",
- "ChangePrefix": "접두사 변경",
- "MarkDocAsDeleted": "문서를 삭제됨으로 표시",
- "MarkDocsAsDeleted": "여러 문서를 삭제됨으로 표시",
- "MarkDocAsDeletedConfirm": "정말 다음 문서를 삭제됨으로 표시하시겠습니까: {titles}?",
- "ArchiveDocs": "{count, plural, =0 {문서} other {문서}} 보관",
- "ArchiveDocsConfirm": "정말 다음 문서를 보관하시겠습니까: {titles}?",
- "DocumentInHierarchy": "계층 내 문서",
- "FirstDraftVersion": "이 문서의 첫 번째 초안 버전입니다. 아직 이력이 없습니다.",
- "FirstOrNotAvailable": "이 문서의 첫 번째 사용 가능한 버전입니다. 아직 이력이 없거나 사용할 수 없습니다.",
- "EffectiveDocumentLifecycle": "유효 문서 라이프사이클",
- "ReasonAndImpact": "사유 및 영향",
- "ImpactAnalysis": "영향 분석",
- "ImpactedDocuments": "영향받는 문서",
- "CreateDocumentFailed": "문서 생성에 실패했습니다",
- "CreateDocumentTemplateFailed": "템플릿 생성에 실패했습니다",
- "TryAgain": "다시 시도해 주세요",
- "DescribeChanges": "변경 내용 설명...",
- "DescribeReason": "변경 사유 설명...",
- "DescribeImpact": "영향 범위 설명...",
- "AddDocument": "문서 추가",
- "NoDocuments": "문서 없음",
- "SysTemplate": "시스템 템플릿",
- "DocumentTrainingDueDays": "기한(일)",
- "DocumentTrainingEnabled": "활성화됨",
- "Own": "소유",
- "Snapshot": "스냅샷",
- "Snapshots": "스냅샷",
- "ControlledSnapshot": "관리 스냅샷",
- "Name": "이름",
- "DraftRevision": "초안 리비전",
- "CreateNewDraft": "새 버전 초안 작성",
- "RestoreDraft": "초안 복원",
- "ChangeSeverity": "심각도 변경",
- "Reference": "참조",
- "History": "이력",
- "Signatories": "서명자",
- "Page": "페이지 ",
- "Of": " / ",
- "CreatedFromTemplate": "템플릿에서 생성: ",
- "ViewAll": "모두 보기",
- "Readonly": "읽기 전용",
- "NewDocumentSpace": "새 문서 스페이스",
- "EditDocumentSpace": "문서 스페이스 편집",
- "DocSpaceDescriptionPlaceholder": "스페이스 설명...",
- "Members": "멤버",
- "CreateOrgSpace": "조직 스페이스 생성",
- "ReviewDocumentPermission": "문서 검토",
- "ReviewDocumentDescription": "사용자에게 문서를 검토할 권한을 부여",
- "ApproveDocumentPermission": "문서 승인",
- "ApproveDocumentDescription": "사용자에게 문서를 승인할 권한을 부여",
- "ArchiveDocumentPermission": "문서 보관",
- "ArchiveDocumentDescription": "사용자에게 문서를 보관할 권한을 부여",
- "CoAuthorDocumentPermission": "문서 공동 작성",
- "CoAuthorDocumentDescription": "사용자에게 문서를 공동 작성할 권한을 부여",
- "CreateDocumentPermission": "문서 생성",
- "CreateDocumentDescription": "사용자에게 문서를 생성할 권한을 부여",
- "UpdateDocumentOwnerPermission": "문서 소유자 업데이트",
- "UpdateDocumentOwnerDescription": "사용자에게 문서 소유자를 업데이트할 권한을 부여",
- "CreateDocumentCategoryPermission": "문서 카테고리 생성",
- "CreateDocumentCategoryDescription": "사용자에게 문서 카테고리를 생성할 권한을 부여",
- "UpdateDocumentCategoryPermission": "문서 카테고리 업데이트",
- "UpdateDocumentCategoryDescription": "사용자에게 문서 카테고리를 업데이트할 권한을 부여",
- "DeleteDocumentCategoryPermission": "문서 카테고리 삭제",
- "DeleteDocumentCategoryDescription": "사용자에게 문서 카테고리를 삭제할 권한을 부여",
- "ConfigLabel": "관리 문서",
- "ConfigDescription": "관리 문서 관리용 확장 기능",
- "Transfer": "이전",
- "TransferWarning": "이 작업 후에는 일부 팀원이 이 문서를 보거나 편집할 수 없게 될 수 있습니다.",
- "TransferDocuments": "관리 문서 이전",
- "TransferDocumentsHint": "선택한 스페이스로 이전할 문서:",
- "CreateFolder": "새 폴더 생성",
- "RenameFolder": "폴더 이름 변경",
- "CreateChildFolder": "하위 폴더 생성",
- "LatestVersionHint": "최신",
- "CannotDeleteFolder": "폴더를 삭제할 수 없습니다",
- "CannotDeleteFolderHint": "폴더를 삭제하기 전에 모든 하위 문서를 다른 위치로 이동하세요.",
- "AllDocumentSpaces": "모든 문서 스페이스"
- },
- "controlledDocStates": {
- "Empty": "",
- "Approved": "승인됨",
- "InApproval": "승인 중",
- "InReview": "검토 중",
- "Reviewed": "검토 완료",
- "Rejected": "반려됨",
- "ToReview": "검토 대기"
- }
+ "ID": "ID",
+ "Code": "코드",
+ "Number": "번호",
+ "Category": "카테고리",
+ "CollaborativeDocument": "공동 편집 문서",
+ "ControlledDocument": "관리 문서",
+ "Requests": "요청",
+ "EffectiveDate": "발효일",
+ "PlannedEffectiveDate": "예정 발효일",
+ "Rank": "순위",
+ "DocumentRequest": "요청",
+ "DocumentReviewRequest": "문서 검토 요청",
+ "DocumentApprovalRequest": "문서 승인 요청",
+ "ControlledStatus": "관리 상태",
+ "Categories": "카테고리",
+ "Guidance": "안내",
+ "Required": "필수",
+ "Description": "설명",
+ "Major": "메이저",
+ "Minor": "마이너",
+ "Patch": "패치",
+ "ValidationWorkflow": "검증 워크플로",
+ "Creator": "생성자",
+ "ChangeOwner": "문서 소유자 변경",
+ "ChangeOwnerHintBeginning": "",
+ "ChangeOwnerHintEnd": "의 소유 권한을 다른 사용자에게 이전합니다.",
+ "ChangeOwnerWarning": "이 작업 후에는 이 문서를 편집할 수 없습니다.",
+ "SelectOwner": "새 소유자 선택",
+ "CreateDocument": "새 문서 생성",
+ "CreateTemplate": "새 템플릿 생성",
+ "Documents": "문서",
+ "Document": "문서",
+ "NewDocumentDialogClose": "이 대화 상자를 닫으시겠습니까?",
+ "NewDocumentCloseNote": "모든 변경 사항이 손실됩니다",
+ "EditorPlaceholder": "입력하여 편집 시작...",
+ "Version": "버전",
+ "TemplateVersion": "템플릿 버전",
+ "VersionValue": "v{major}.{minor}",
+ "SearchDocument": "문서 검색...",
+ "CreateEnVersion": "검토용 버전 생성",
+ "Approvers": "승인자",
+ "ExternalApprovers": "외부 승인자",
+ "CoAuthors": "공동 작성자",
+ "Status": "상태",
+ "TemplateName": "템플릿 이름",
+ "DocumentApplication": "관리 문서",
+ "MyDocuments": "내 문서",
+ "Library": "라이브러리",
+ "Labels": "라벨",
+ "Author": "작성자",
+ "Review": "검토",
+ "Approval": "승인",
+ "Reviewer": "검토자",
+ "Approver": "승인자",
+ "DeleteCategory": "카테고리를 삭제하시겠습니까?",
+ "DeleteCategoryHint": "이 작업은 되돌릴 수 없습니다",
+ "DeleteCategoryWarning": "사용 중이므로 카테고리를 삭제할 수 없습니다",
+ "Latest": "최신",
+ "Draft": "초안",
+ "Reviewers": "검토자",
+ "ViewMode": "보기 중",
+ "EditMode": "편집 중",
+ "ComparisonMode": "비교 중",
+ "Compare": "비교:",
+ "Against": "대상:",
+ "RemovedAttachments": "삭제된 첨부 파일",
+ "Restore": "복원",
+ "ComparisonModeNotSupported": "비교 모드는 지원되지 않습니다.",
+ "CreateDraft": "초안 생성",
+ "SendForApproval": "승인 요청",
+ "SendForReview": "검토 요청",
+ "CompleteReview": "검토 완료하기",
+ "Approve": "승인",
+ "Reject": "반려",
+ "ConfirmApproval": "승인 확인",
+ "ConfirmRejection": "반려 확인",
+ "ProvideRejectionReason": "반려 사유 입력...",
+ "RejectionReason": "반려 사유",
+ "ConfirmReviewCompletion": "검토 완료 확인",
+ "ConfirmApprovalSubmission": "승인 요청 확인",
+ "ConfirmReviewSubmission": "검토 요청 확인",
+ "AddApprovalTitle": "승인자에게 문서 전송",
+ "AddApprovalDescription1": "승인 요청을 위해 문서가 다음 요건을 충족해야 합니다:",
+ "AddApprovalDescription2": "상태가 '초안' 또는 '검토 완료'",
+ "AddApprovalDescription3": "미해결 댓글 없음",
+ "AddApprovalDescription4": "교육훈련이 계획된 경우, 교육훈련 상태가 '릴리스됨'",
+ "NoApprovalsDescription": "이 버전의 문서에는 승인 내역이 없습니다",
+ "CurrentVersion": "현재 버전",
+ "DocumentTemplate": "템플릿",
+ "DocumentTemplates": "템플릿",
+ "DocumentCode": "문서 코드",
+ "TemplateCode": "템플릿 코드",
+ "DocumentCodePlaceholder": "DOC-1",
+ "DocumentPrefixPlaceholder": "DOC",
+ "DocumentPrefix": "문서 접두사",
+ "DocumentTemplateCreateLabel": "템플릿",
+ "DocumentCategoryCreateLabel": "카테고리",
+ "CreateDocumentCategory": "카테고리 생성",
+ "DocumentCategoryAlreadyExists": "이미 존재하는 카테고리입니다: \"{title}\". ",
+ "DocumentCategoryCodeAlreadyExists": "이미 사용 중인 코드입니다: \"{code}\". ",
+ "AttachmentsMax": "허용되는 최대 첨부 파일 수",
+ "Resolve": "해결",
+ "Unresolve": "미해결",
+ "Pending": "대기 중",
+ "Resolved": "해결됨",
+ "ShowResolved": "해결된 댓글 표시",
+ "Ordering": "순서",
+ "Title": "제목",
+ "Effective": "유효",
+ "Archived": "보관됨",
+ "Deleted": "삭제됨",
+ "MetaAbstract": "개요",
+ "Obsolete": "폐기",
+ "MakeDocumentObsolete": "폐기로 표시",
+ "MakeDocumentObsoleteDialog": "{count, plural, =0 {문서} other {문서}} 폐기로 표시",
+ "MakeDocumentObsoleteConfirm": "정말 다음 문서를 폐기로 표시하시겠습니까: {titles}?",
+ "ContentTab": "콘텐츠",
+ "TeamTab": "팀",
+ "MetaTab": "메타데이터",
+ "ChangeControlTab": "변경 관리",
+ "ReleaseTab": "릴리스",
+ "HistoryTab": "이력",
+ "ModificationDate": "수정일",
+ "Modified": "수정됨",
+ "Owner": "소유자",
+ "AssignedTo": "담당자",
+ "Unassigned": "미할당",
+ "Untitled": "제목 없음",
+ "Copy": "복사",
+ "AccessWorkarea": "작업 영역 접근",
+ "EffectiveLibrary": "유효 라이브러리",
+ "WorkingLibrary": "작업 라이브러리",
+ "CreateDraftQmsDocuments": "QMS 문서 초안 생성",
+ "OwnDocumentAskReviewGetApproval": "QMS 문서를 소유하고, 검토를 요청하여 승인 받기",
+ "ApproveDocuments": "문서 승인",
+ "ReassignOwnershipToAnotherUser": "다른 사용자에게 소유권 재할당",
+ "MakeDocumentEffective": "문서 발효 처리",
+ "CreateDraftQmsTemplates": "QMS 템플릿 초안 생성",
+ "ChangeControl": "변경 관리",
+ "ReviewInterval": "검토 주기",
+ "SelectReviewers": "검토자 선택",
+ "SelectApprovers": "승인자 선택",
+ "RequestsToReviewTheDoc": "님이 문서 검토를 요청합니다",
+ "RequestsToApproveTheDoc": "님이 문서 승인을 요청합니다",
+ "Parent": "상위",
+ "Template": "템플릿",
+ "GeneralInfo": "기본 정보",
+ "InProgress": "진행 중",
+ "EditDescription": "설명 편집",
+ "EditGuidance": "안내 편집",
+ "NewDocument": "새 문서",
+ "NewDocumentCategory": "새 카테고리",
+ "NewDocumentTemplate": "새 템플릿",
+ "LocationStepTitle": "위치",
+ "TemplateStepTitle": "템플릿",
+ "InfoStepTitle": "정보",
+ "TeamStepTitle": "팀",
+ "TitleAndDescr": "제목 및 설명",
+ "Reason": "사유",
+ "AbstractPlaceholder": "이 문서는 어떤 내용인가요? 누가 언제 필요로 하나요? ...",
+ "NewDocCreation": "새 문서 생성",
+ "NewTemplateCreation": "새 템플릿 생성",
+ "NewTemplatePlaceholder": "이 템플릿은 어떤 내용인가요? 올바른 사용 방법을 설명하세요...",
+ "CustomReason": "사용자 지정",
+ "ReasonPlaceholder": "사유 입력...",
+ "EditDocument": "문서 편집",
+ "Key": "키",
+ "CommentsSequence": "댓글 시퀀스",
+ "Email": "이메일",
+ "Password": "비밀번호",
+ "FieldIsEmpty": "{field}이(가) 비어 있습니다",
+ "ValidatingCredentials": "인증 정보 확인 중...",
+ "GeneralDocumentation": "사내 문서",
+ "TechnicalDocumentation": "기술 문서",
+ "UnsortedTemplates": "분류되지 않은 템플릿",
+ "Project": "프로젝트",
+ "Projects": "프로젝트",
+ "ExternalSpace": "프로젝트 스페이스",
+ "DocumentSpaceType": "문서 스페이스 유형",
+ "EffectiveImmediately": "승인 즉시",
+ "EffectiveOn": "발효일 지정",
+ "PeriodicReviewToBeCompleted": "정기 검토 완료 기한",
+ "MonthsAfterEffectiveDate": "발효일로부터 개월 후",
+ "ToBePassedWithin": "통과 기한",
+ "AttemptsAnd": "회 시도 및",
+ "DaysAfterEffectiveDate": "발효일로부터의 일수",
+ "Index": "인덱스",
+ "Path": "경로",
+ "CreateChildDocument": "하위 문서 생성",
+ "CreateChildTemplate": "하위 템플릿 생성",
+ "All": "전체",
+ "Space": "스페이스",
+ "SelectParent": "문서의 상위 객체 선택",
+ "PrefixInUse": "이 접두사는 이미 사용 중입니다:",
+ "CodeInUse": "이 코드는 이미 사용 중입니다:",
+ "ChangeCode": "코드 변경",
+ "ChangePrefix": "접두사 변경",
+ "MarkDocAsDeleted": "문서를 삭제됨으로 표시",
+ "MarkDocsAsDeleted": "여러 문서를 삭제됨으로 표시",
+ "MarkDocAsDeletedConfirm": "정말 다음 문서를 삭제됨으로 표시하시겠습니까: {titles}?",
+ "ArchiveDocs": "{count, plural, =0 {문서} other {문서}} 보관",
+ "ArchiveDocsConfirm": "정말 다음 문서를 보관하시겠습니까: {titles}?",
+ "DocumentInHierarchy": "계층 내 문서",
+ "FirstDraftVersion": "이 문서의 첫 번째 초안 버전입니다. 아직 이력이 없습니다.",
+ "FirstOrNotAvailable": "이 문서의 첫 번째 사용 가능한 버전입니다. 아직 이력이 없거나 사용할 수 없습니다.",
+ "EffectiveDocumentLifecycle": "유효 문서 라이프사이클",
+ "ReasonAndImpact": "사유 및 영향",
+ "ImpactAnalysis": "영향 분석",
+ "ImpactedDocuments": "영향받는 문서",
+ "CreateDocumentFailed": "문서 생성에 실패했습니다",
+ "CreateDocumentTemplateFailed": "템플릿 생성에 실패했습니다",
+ "TryAgain": "다시 시도해 주세요",
+ "DescribeChanges": "변경 내용 설명...",
+ "DescribeReason": "변경 사유 설명...",
+ "DescribeImpact": "영향 범위 설명...",
+ "AddDocument": "문서 추가",
+ "NoDocuments": "문서 없음",
+ "SysTemplate": "시스템 템플릿",
+ "DocumentTrainingDueDays": "기한(일)",
+ "DocumentTrainingEnabled": "활성화됨",
+ "Own": "소유",
+ "Snapshot": "스냅샷",
+ "Snapshots": "스냅샷",
+ "ControlledSnapshot": "관리 스냅샷",
+ "Name": "이름",
+ "DraftRevision": "초안 리비전",
+ "CreateNewDraft": "새 버전 초안 작성",
+ "RestoreDraft": "초안 복원",
+ "ChangeSeverity": "심각도 변경",
+ "Reference": "참조",
+ "History": "이력",
+ "Signatories": "서명자",
+ "Page": "페이지 ",
+ "Of": " / ",
+ "CreatedFromTemplate": "템플릿에서 생성: ",
+ "ViewAll": "모두 보기",
+ "Readonly": "읽기 전용",
+ "NewDocumentSpace": "새 문서 스페이스",
+ "EditDocumentSpace": "문서 스페이스 편집",
+ "DocSpaceDescriptionPlaceholder": "스페이스 설명...",
+ "Members": "멤버",
+ "CreateOrgSpace": "조직 스페이스 생성",
+ "ReviewDocumentPermission": "문서 검토",
+ "ReviewDocumentDescription": "사용자에게 문서를 검토할 권한을 부여",
+ "ApproveDocumentPermission": "문서 승인",
+ "ApproveDocumentDescription": "사용자에게 문서를 승인할 권한을 부여",
+ "ArchiveDocumentPermission": "문서 보관",
+ "ArchiveDocumentDescription": "사용자에게 문서를 보관할 권한을 부여",
+ "CoAuthorDocumentPermission": "문서 공동 작성",
+ "CoAuthorDocumentDescription": "사용자에게 문서를 공동 작성할 권한을 부여",
+ "CreateDocumentPermission": "문서 생성",
+ "CreateDocumentDescription": "사용자에게 문서를 생성할 권한을 부여",
+ "UpdateDocumentOwnerPermission": "문서 소유자 업데이트",
+ "UpdateDocumentOwnerDescription": "사용자에게 문서 소유자를 업데이트할 권한을 부여",
+ "CreateDocumentCategoryPermission": "문서 카테고리 생성",
+ "CreateDocumentCategoryDescription": "사용자에게 문서 카테고리를 생성할 권한을 부여",
+ "UpdateDocumentCategoryPermission": "문서 카테고리 업데이트",
+ "UpdateDocumentCategoryDescription": "사용자에게 문서 카테고리를 업데이트할 권한을 부여",
+ "DeleteDocumentCategoryPermission": "문서 카테고리 삭제",
+ "DeleteDocumentCategoryDescription": "사용자에게 문서 카테고리를 삭제할 권한을 부여",
+ "ConfigLabel": "관리 문서",
+ "ConfigDescription": "관리 문서 관리용 확장 기능",
+ "Transfer": "이전",
+ "TransferWarning": "이 작업 후에는 일부 팀원이 이 문서를 보거나 편집할 수 없게 될 수 있습니다.",
+ "TransferDocuments": "관리 문서 이전",
+ "TransferDocumentsHint": "선택한 스페이스로 이전할 문서:",
+ "CreateFolder": "새 폴더 생성",
+ "RenameFolder": "폴더 이름 변경",
+ "CreateChildFolder": "하위 폴더 생성",
+ "LatestVersionHint": "최신",
+ "CannotDeleteFolder": "폴더를 삭제할 수 없습니다",
+ "CannotDeleteFolderHint": "폴더를 삭제하기 전에 모든 하위 문서를 다른 위치로 이동하세요.",
+ "AllDocumentSpaces": "모든 문서 스페이스"
+ },
+ "controlledDocStates": {
+ "Empty": "",
+ "Approved": "승인됨",
+ "InApproval": "승인 중",
+ "InReview": "검토 중",
+ "Reviewed": "검토 완료",
+ "Rejected": "반려됨",
+ "ToReview": "검토 대기"
+ }
}
diff --git a/plugins/controlled-documents-assets/lang/pl.json b/plugins/controlled-documents-assets/lang/pl.json
index df848a7922..cc8cfb98c3 100644
--- a/plugins/controlled-documents-assets/lang/pl.json
+++ b/plugins/controlled-documents-assets/lang/pl.json
@@ -2,14 +2,6 @@
"string": {
"Export": "Eksportuj",
"Import": "Importuj",
- "ImportingDocument": "Importowanie dokumentu",
- "ConvertingDocument": "Konwertowanie dokumentu…",
- "ImportingFromWord": "Importowanie z Word",
- "ConvertingWordDocument": "Konwertowanie dokumentu…",
- "DocumentConverted": "Dokument przekonwertowany",
- "ImportFailed": "Import nie powiódł się",
- "ReviewImportedChanges": "Przejrzyj zaimportowane zmiany",
- "Apply": "Zastosuj",
"ExportToWord": "Eksportuj do Word",
"ImportFromWord": "Importuj z Word",
"ID": "Identyfikator",
@@ -46,7 +38,6 @@
"Document": "Dokument",
"NewDocumentDialogClose": "Czy chcesz zamknąć to okno?",
"NewDocumentCloseNote": "Wszystkie zmiany zostaną utracone",
- "Cancel": "Anuluj",
"EditorPlaceholder": "rozpocznij edycję...",
"Version": "Wersja",
"TemplateVersion": "Wersja szablonu",
@@ -67,32 +58,24 @@
"Approval": "Zatwierdzenie",
"Reviewer": "Recenzent",
"Approver": "Zatwierdzający",
-
"DeleteCategory": "Usunąć kategorię?",
"DeleteCategoryHint": "Tej akcji nie można cofnąć",
"DeleteCategoryWarning": "Tej kategorii nie można usunąć, ponieważ jest używana",
-
"Latest": "Aktualny",
"Draft": "Szkic",
-
"Reviewers": "Recenzenci",
-
"ViewMode": "Przegląd w trakcie",
"EditMode": "Edycja",
"ComparisonMode": "Porównywanie",
-
"Compare": "Porównaj:",
"Against": "Z:",
"RemovedAttachments": "Usunięte załączniki",
"Restore": "Przywróć",
-
"ComparisonModeNotSupported": "Tryb porównania nie jest obsługiwany.",
-
"CreateDraft": "Utwórz szkic",
"SendForApproval": "Wyślij do zatwierdzenia",
"SendForReview": "Wyślij do recenzji",
"CompleteReview": "Zakończ recenzję",
-
"Approve": "Zatwierdź",
"Reject": "Odrzuć",
"ConfirmApproval": "Utrzymaj zatwierdzenie",
@@ -109,7 +92,6 @@
"AddApprovalDescription4": "jeśli planowane jest szkolenie, szkolenie ma status 'Opublikowane'",
"NoApprovalsDescription": "Nikt nie zatwierdził tej wersji dokumentu",
"CurrentVersion": "Aktualna wersja",
-
"DocumentTemplate": "Szablon",
"DocumentTemplates": "Szablony",
"DocumentCode": "Kod dokumentu",
@@ -130,24 +112,20 @@
"ShowResolved": "Pokaż rozwiązane komentarze",
"Ordering": "Porządkowanie",
"Title": "Tytuł",
-
"Effective": "Aktualny",
"Archived": "Zarchiwizowany",
"Deleted": "Usunięty",
"MetaAbstract": "Streszczenie",
-
"Obsolete": "Przestarzały",
"MakeDocumentObsolete": "Oznacz jako przestarzały",
"MakeDocumentObsoleteDialog": "Oznacz {count, plural, =0 {dokument} other {dokumenty}} jako przestarzałe",
"MakeDocumentObsoleteConfirm": "Czy naprawdę chcesz oznaczyć następujące dokumenty jako przestarzałe: {titles}?",
-
"ContentTab": "Zawartość",
"TeamTab": "Zespół",
"MetaTab": "Metadane",
"ChangeControlTab": "Kontrola zmian",
"ReleaseTab": "Wydanie",
"HistoryTab": "Historia",
-
"ModificationDate": "Zmodyfikowano o",
"Modified": "Zmodyfikowany",
"Owner": "Właściciel",
@@ -155,7 +133,6 @@
"Unassigned": "Nieprzypisany",
"Untitled": "Bez nazwy",
"Copy": "kopiuj",
-
"AccessWorkarea": "Dostęp do obszaru roboczego",
"EffectiveLibrary": "Biblioteka aktualnych dokumentów",
"WorkingLibrary": "Biblioteka robocza",
@@ -165,10 +142,8 @@
"ReassignOwnershipToAnotherUser": "Przepisz własność na innego użytkownika",
"MakeDocumentEffective": "Uczyń dokument aktualnym",
"CreateDraftQmsTemplates": "Utwórz szkice szablonów dla systemu zarządzania jakością",
-
"ChangeControl": "Kontrola zmian",
"ReviewInterval": "Interwał recenzji",
-
"SelectReviewers": "Wybierz recenzentów",
"SelectApprovers": "Wybierz zatwierdzających",
"RequestsToReviewTheDoc": "prosi cię o recenzję dokumentu",
@@ -177,19 +152,15 @@
"Template": "Szablon",
"GeneralInfo": "Informacje ogólne",
"InProgress": "W trakcie",
-
"EditDescription": "Edytuj opis",
"EditGuidance": "Edytuj wskazówki",
-
"NewDocument": "Nowy dokument",
"NewDocumentCategory": "Nowa kategoria",
"NewDocumentTemplate": "Nowy szablon",
-
"LocationStepTitle": "Lokalizacja",
"TemplateStepTitle": "Szablon",
"InfoStepTitle": "Informacje",
"TeamStepTitle": "Zespół",
-
"TitleAndDescr": "Tytuł i opis",
"Reason": "Powód",
"AbstractPlaceholder": "O czym jest ten dokument? Kto będzie go potrzebować i kiedy? ...",
@@ -198,17 +169,13 @@
"NewTemplatePlaceholder": "O czym jest ten szablon? Opisz, jak prawidłowo go używać...",
"CustomReason": "Niestandardowy",
"ReasonPlaceholder": "Określ powód...",
-
"EditDocument": "Edytuj dokument",
-
"Key": "Klucz",
"CommentsSequence": "Sekwencja komentarzy",
-
"Email": "E-mail",
"Password": "Hasło",
"FieldIsEmpty": "Pole {field} jest puste",
"ValidatingCredentials": "Sprawdzanie poświadczeń...",
-
"GeneralDocumentation": "Dokumentacja ogólna",
"TechnicalDocumentation": "Dokumentacja techniczna",
"UnsortedTemplates": "Nieposortowane szablony",
@@ -216,53 +183,39 @@
"Projects": "Projekty",
"ExternalSpace": "Przestrzeń projektu",
"DocumentSpaceType": "Typ przestrzeni dokumentów",
-
"EffectiveImmediately": "Natychmiast po zatwierdzeniu",
"EffectiveOn": "Uczyń aktualnym dnia",
-
"PeriodicReviewToBeCompleted": "Okresowa recenzja do zakończenia w ciągu",
"MonthsAfterEffectiveDate": "miesięcy po dacie wejścia w życie",
"ToBePassedWithin": "Należy zaliczyć w",
"AttemptsAnd": "próbach oraz w ciągu",
"DaysAfterEffectiveDate": "dni od daty wejścia w życie",
-
"Index": "Spis treści",
"Path": "Ścieżka",
-
"CreateChildDocument": "Utwórz poddokument",
"CreateChildTemplate": "Utwórz szablon podrzędny",
-
"All": "Wszystkie",
-
"Space": "Przestrzeń",
"SelectParent": "Wybierz obiekt nadrzędny dla swojego dokumentu",
-
"PrefixInUse": "Ten przedrostek jest już używany przez",
"CodeInUse": "Ten kod jest już używany przez",
"ChangeCode": "Zmień kod",
"ChangePrefix": "Zmień przedrostek",
-
"MarkDocAsDeleted": "Oznaczanie dokumentu jako usuniętego",
"MarkDocsAsDeleted": "Oznaczanie wielu dokumentów jako usuniętych",
"MarkDocAsDeletedConfirm": "Czy naprawdę chcesz oznaczyć następujące dokumenty jako usunięte: {titles}?",
-
"ArchiveDocs": "Zarchiwizuj {count, plural, =1 {dokument} other {dokumenty}}",
"ArchiveDocsConfirm": "Czy naprawdę chcesz zarchiwizować następujące dokumenty: {titles}?",
-
"DocumentInHierarchy": "Dokument w hierarchii",
"FirstDraftVersion": "To jest pierwsza wersja szkicu dokumentu. Nie ma jeszcze historii.",
"FirstOrNotAvailable": "To jest pierwsza dostępna wersja dokumentu. Nie ma jeszcze historii lub nie jest dostępna.",
-
"EffectiveDocumentLifecycle": "Cykl życia aktualnego dokumentu",
-
"ReasonAndImpact": "Powód i wpływ",
"ImpactAnalysis": "Analiza wpływu",
"ImpactedDocuments": "Dokumenty dotknięte",
-
"CreateDocumentFailed": "Nie udało się utworzyć dokumentu",
"CreateDocumentTemplateFailed": "Nie udało się utworzyć szablonu",
"TryAgain": "Spróbuj ponownie",
-
"DescribeChanges": "Opisz, co zostało zmienione...",
"DescribeReason": "Opisz, dlaczego to zostało zmienione...",
"DescribeImpact": "Wpływa na...",
@@ -286,17 +239,13 @@
"Page": "Strona ",
"Of": " z ",
"CreatedFromTemplate": "Utworzony z szablonu: ",
-
"ViewAll": "Zobacz wszystkie",
"Readonly": "Tylko do odczytu",
-
"NewDocumentSpace": "Nowa przestrzeń dokumentów",
"EditDocumentSpace": "Edytuj przestrzeń dokumentów",
-
"DocSpaceDescriptionPlaceholder": "Opisz swoją przestrzeń...",
"Members": "Członkowie",
"CreateOrgSpace": "Utwórz przestrzeń organizacji",
-
"ReviewDocumentPermission": "Recenzuj dokumenty",
"ReviewDocumentDescription": "Umożliwia użytkownikom recenzowanie dokumentów",
"ApproveDocumentPermission": "Zatwierdzaj dokumenty",
@@ -309,7 +258,6 @@
"CreateDocumentDescription": "Umożliwia użytkownikom tworzenie dokumentów",
"UpdateDocumentOwnerPermission": "Aktualizuj właściciela dokumentu",
"UpdateDocumentOwnerDescription": "Umożliwia użytkownikom aktualizację właściciela dokumentu",
-
"CreateDocumentCategoryPermission": "Utwórz kategorię dokumentu",
"CreateDocumentCategoryDescription": "Umożliwia użytkownikom tworzenie kategorii dokumentów",
"UpdateDocumentCategoryPermission": "Aktualizuj kategorię dokumentu",
@@ -318,21 +266,16 @@
"DeleteDocumentCategoryDescription": "Umożliwia użytkownikom usuwanie kategorii dokumentów",
"ConfigLabel": "Dokumenty autoryzowane",
"ConfigDescription": "Rozszerzenie do zarządzania autoryzacją dokumentów",
-
"Transfer": "Przenieś",
"TransferWarning": "Niektórzy członkowie zespołu mogą utracić możliwość przeglądania lub edycji tego dokumentu po tej akcji.",
"TransferDocuments": "Przenieś dokumenty autoryzowane",
"TransferDocumentsHint": "Dokumenty do przeniesienia do wybranej przestrzeni:",
-
"CreateFolder": "Utwórz nowy folder",
"RenameFolder": "Zmień nazwę folderu",
"CreateChildFolder": "Utwórz podfolder",
-
"LatestVersionHint": "najnowsza",
-
"CannotDeleteFolder": "Folder nie może zostać usunięty",
"CannotDeleteFolderHint": "Przenieś wszystkie dokumenty podrzędne do innej lokalizacji przed usunięciem folderu.",
-
"AllDocumentSpaces": "Wszystkie przestrzenie dokumentów"
},
"controlledDocStates": {
diff --git a/plugins/controlled-documents-assets/lang/pt-br.json b/plugins/controlled-documents-assets/lang/pt-br.json
index 241e11c7ad..c6ebf7bf18 100644
--- a/plugins/controlled-documents-assets/lang/pt-br.json
+++ b/plugins/controlled-documents-assets/lang/pt-br.json
@@ -2,14 +2,6 @@
"string": {
"Export": "Exportar",
"Import": "Importar",
- "ImportingDocument": "Importando o documento",
- "ConvertingDocument": "Convertendo o documento…",
- "ImportingFromWord": "Importando do Word",
- "ConvertingWordDocument": "Convertendo o documento…",
- "DocumentConverted": "Documento convertido",
- "ImportFailed": "Falha na importação",
- "ReviewImportedChanges": "Revisar as alterações importadas",
- "Apply": "Aplicar",
"ExportToWord": "Exportar para Word",
"ImportFromWord": "Importar do Word",
"ID": "ID",
@@ -46,7 +38,6 @@
"Document": "Documento",
"NewDocumentDialogClose": "Deseja fechar este diálogo?",
"NewDocumentCloseNote": "Todas as alterações serão perdidas",
- "Cancel": "Cancelar",
"EditorPlaceholder": "Digite para começar a editar...",
"Version": "Versão",
"TemplateVersion": "Versão do modelo",
diff --git a/plugins/controlled-documents-assets/lang/pt.json b/plugins/controlled-documents-assets/lang/pt.json
index 976e6b4cfe..c6ebf7bf18 100644
--- a/plugins/controlled-documents-assets/lang/pt.json
+++ b/plugins/controlled-documents-assets/lang/pt.json
@@ -2,14 +2,6 @@
"string": {
"Export": "Exportar",
"Import": "Importar",
- "ImportingDocument": "A importar o documento",
- "ConvertingDocument": "A converter o documento…",
- "ImportingFromWord": "A importar do Word",
- "ConvertingWordDocument": "A converter o documento…",
- "DocumentConverted": "Documento convertido",
- "ImportFailed": "Falha na importação",
- "ReviewImportedChanges": "Rever as alterações importadas",
- "Apply": "Aplicar",
"ExportToWord": "Exportar para Word",
"ImportFromWord": "Importar do Word",
"ID": "ID",
@@ -46,7 +38,6 @@
"Document": "Documento",
"NewDocumentDialogClose": "Deseja fechar este diálogo?",
"NewDocumentCloseNote": "Todas as alterações serão perdidas",
- "Cancel": "Cancelar",
"EditorPlaceholder": "Digite para começar a editar...",
"Version": "Versão",
"TemplateVersion": "Versão do modelo",
diff --git a/plugins/controlled-documents-assets/lang/ru.json b/plugins/controlled-documents-assets/lang/ru.json
index 9aa21cf628..65613cd882 100644
--- a/plugins/controlled-documents-assets/lang/ru.json
+++ b/plugins/controlled-documents-assets/lang/ru.json
@@ -2,14 +2,6 @@
"string": {
"Export": "Экспорт",
"Import": "Импорт",
- "ImportingDocument": "Импорт документа",
- "ConvertingDocument": "Конвертация документа…",
- "ImportingFromWord": "Импорт из Word",
- "ConvertingWordDocument": "Конвертация документа…",
- "DocumentConverted": "Документ сконвертирован",
- "ImportFailed": "Ошибка импорта",
- "ReviewImportedChanges": "Просмотрите импортированные изменения",
- "Apply": "Применить",
"ExportToWord": "Экспорт в Word",
"ImportFromWord": "Импорт из Word",
"ID": "ID",
@@ -46,7 +38,6 @@
"Document": "Документ",
"NewDocumentDialogClose": "Вы действительно хотите закрыть окно?",
"NewDocumentCloseNote": "Все внесенные изменения будут потеряны",
- "Cancel": "Отмена",
"EditorPlaceholder": "введите для начала...",
"Version": "Версия",
"TemplateVersion": "Версия шаблона",
@@ -67,32 +58,24 @@
"Approval": "Утверждение",
"Reviewer": "Рецензент",
"Approver": "Утверждающий",
-
"DeleteCategory": "Удалить категорию?",
"DeleteCategoryHint": "Это действие не может быть отменено",
"DeleteCategoryWarning": "Эта категория используется, поэтому не может быть удалена",
-
"Latest": "Актуально",
"Draft": "Рабочая копия",
-
"Reviewers": "Рецензенты",
-
"ViewMode": "Просмотр",
"EditMode": "Редактирование",
"ComparisonMode": "Сравнение",
-
"Compare": "Сравнить:",
"Against": "с:",
"RemovedAttachments": "Удалённые вложения",
"Restore": "Восстановить",
-
"ComparisonModeNotSupported": "Сравнение не поддерживается.",
-
"CreateDraft": "Создать рабочую копию",
"SendForApproval": "Попросить утверждения",
"SendForReview": "Попросить рецензию",
"CompleteReview": "Закончить рецензию",
-
"Approve": "Утвердить",
"Reject": "Отказать",
"ConfirmApproval": "Подтвердите согласие",
@@ -109,7 +92,6 @@
"AddApprovalDescription4": "если запланирован тренинг, то этот тренинг должен иметь статус 'Опубликован'",
"NoApprovalsDescription": "Нет утверждений для этой версии документа",
"CurrentVersion": "Текущая версия",
-
"DocumentTemplate": "Шаблон",
"DocumentTemplates": "Шаблоны",
"DocumentCode": "Код документа",
@@ -130,19 +112,16 @@
"ShowResolved": "Показать выполненные",
"Ordering": "Сортировка",
"Title": "Заголовок",
-
"Effective": "Актуальная",
"Archived": "Архивированный",
"Deleted": "Удаленный",
"MetaAbstract": "Описание",
-
"ContentTab": "Документ",
"TeamTab": "Команда",
"MetaTab": "Метаданные",
"ChangeControlTab": "Контроль изменений",
"ReleaseTab": "Выпуск",
"HistoryTab": "История",
-
"ModificationDate": "Модифицированно",
"Modified": "Модифицированно",
"Owner": "Владелец",
@@ -150,7 +129,6 @@
"Unassigned": "Не назначено",
"Untitled": "Без названия",
"Copy": "копия",
-
"AccessWorkarea": "Доступ к рабочей области",
"EffectiveLibrary": "Действующая библиотека",
"WorkingLibrary": "Рабочая библиотека",
@@ -160,10 +138,8 @@
"ReassignOwnershipToAnotherUser": "Переназначение права владения другому пользователю",
"MakeDocumentEffective": "Сделать документ действующим",
"CreateDraftQmsTemplates": "Создание черновых QMS шаблонов",
-
"ChangeControl": "Контроль Изменений",
"ReviewInterval": "Интервал ревью",
-
"SelectReviewers": "Выберите рецензентов",
"SelectApprovers": "Выберите утверждающих",
"RequestsToReviewTheDoc": "запрашивает у вас рецензию на документ",
@@ -172,19 +148,15 @@
"Template": "Шаблон",
"GeneralInfo": "Общая информация",
"InProgress": "Выполняется",
-
"EditDescription": "Редактировать описание",
"EditGuidance": "Редактировать руководство",
-
"NewDocument": "Новый документ",
"NewDocumentCategory": "Новая категория",
"NewDocumentTemplate": "Новый шаблон",
-
"LocationStepTitle": "Расположение",
"TemplateStepTitle": "Шаблон",
"InfoStepTitle": "Инфо",
"TeamStepTitle": "Команда",
-
"TitleAndDescr": "Заголовок и описание",
"Reason": "Причина",
"AbstractPlaceholder": "О чем этот документ? Кто будет его использовать и как? ...",
@@ -193,17 +165,13 @@
"NewTemplatePlaceholder": "О чем этот шаблон? Опишите как правильно его использовать...",
"CustomReason": "Другая",
"ReasonPlaceholder": "Укажите причину...",
-
"EditDocument": "Редактировать документ",
-
"Key": "Ключ",
"CommentsSequence": "Последовательность комментариев",
-
"Email": "Email",
"Password": "Пароль",
"FieldIsEmpty": "{field} не задан",
"ValidatingCredentials": "Проверка информации...",
-
"GeneralDocumentation": "Общая документация",
"TechnicalDocumentation": "Техническая документация",
"UnsortedTemplates": "Несортированные шаблоны",
@@ -211,59 +179,45 @@
"Projects": "Проекты",
"ExternalSpace": "Пространства проектов",
"DocumentSpaceType": "Тип пространства документов",
-
"EffectiveImmediately": "Сразу после утверждения",
"EffectiveOn": "Сделать эффективным:",
-
"PeriodicReviewToBeCompleted": "Периодическое ревью документа в течение",
"MonthsAfterEffectiveDate": "месяцев после даты, когда документ стал эффективным",
"ToBePassedWithin": "Пройти в течение",
"AttemptsAnd": "попыток и",
"DaysAfterEffectiveDate": "дней после даты, когда документ стал эффективным",
-
"Index": "Индекс",
"Path": "Путь",
-
"CreateChildDocument": "Создать дочерний документ",
"CreateChildTemplate": "Создать дочерний шаблон",
-
"All": "Все",
-
"Space": "Пространство",
"SelectParent": "Выберите родительский объект для Вашего документа",
-
"PrefixInUse": "Этот префикс уже используется",
"CodeInUse": "Этот код уже используется",
"ChangeCode": "Изменить код",
"ChangePrefix": "Изменить префикс",
-
"MarkDocAsDeleted": "Пометить документ как удаленный",
"MarkDocsAsDeleted": "Пометить несколько документов как удаленные",
"MarkDocAsDeletedConfirm": "Вы действительно хотите пометить следующие документы как удаленные: {titles}?",
"ArchiveDocs": "Архивировать {count, plural, =0 {документ} other {документы}}",
"ArchiveDocsConfirm": "Вы действительно хотите архивировать следующие документы: {titles}?",
-
"DocumentInHierarchy": "Документ в иерархии",
- "FirstDraftVersion": "Это первая рабочая копия документа. Для него пока нет истории.",
+ "FirstDraftVersion": "Это первая рабочая копия документа. Для него пока нет истории.",
"FirstOrNotAvailable": "Это первая доступная версия документа. История еще не создана или недоступна.",
-
"EffectiveDocumentLifecycle": "Эффективный жизненный цикл документа",
-
"ReasonAndImpact": "Причина и Воздействие",
"ImpactAnalysis": "Анализ воздействия",
"ImpactedDocuments": "Подверженные документы",
-
"CreateDocumentFailed": "Ошибка при создании документа",
"CreateDocumentTemplateFailed": "Ошибка при создании шаблона",
"TryAgain": "Пожалуйста, попробуйте снова",
-
"DescribeChanges": "Опишите, что поменялось...",
"DescribeReason": "Опишите, почему это поменялось...",
"DescribeImpact": "Воздействует на...",
"AddDocument": "Добавить документ",
"NoDocuments": "Нет документов",
"SysTemplate": "Системный шаблон",
-
"DocumentTrainingDueDays": "Срок",
"DocumentTrainingEnabled": "Включен",
"Own": "Собственный",
@@ -282,17 +236,13 @@
"Of": " из ",
"CreatedFromTemplate": "Создан из шаблона: ",
"UncontrolledCopy": "Неконтролируемая копия",
-
"ViewAll": "Показать все",
"Readonly": "Только для чтения",
-
"NewDocumentSpace": "Новое пространство документов",
"EditDocumentSpace": "Редактировать пространство документов",
-
"DocSpaceDescriptionPlaceholder": "Опишите Ваше пространство...",
"Members": "Участники",
"CreateOrgSpace": "Создать пространство организации",
-
"ReviewDocumentPermission": "Рецензировать документ",
"ReviewDocumentDescription": "Предоставляет пользователям разрешение рецензировать документ",
"ApproveDocumentPermission": "Утверждать документ",
@@ -305,7 +255,6 @@
"CreateDocumentDescription": "Предоставляет пользователям разрешение создавать документ",
"UpdateDocumentOwnerPermission": "Изменять владельца документа",
"UpdateDocumentOwnerDescription": "Предоставляет пользователям разрешение изменять владельца документа",
-
"CreateDocumentCategoryPermission": "Создавать категорию",
"CreateDocumentCategoryDescription": "Предоставляет пользователям разрешение создавать категорию",
"UpdateDocumentCategoryPermission": "Обновлять категорию",
@@ -314,26 +263,20 @@
"DeleteDocumentCategoryDescription": "Предоставляет пользователям разрешение удалять категорию",
"ConfigLabel": "Управляемые Документы",
"ConfigDescription": "Расширение для управления управляемыми документами",
-
"Transfer": "Трансфер",
"TransferWarning": "После этого действия некоторые члены команды могут потерять возможность просматривать или редактировать этот документ.",
"TransferDocuments": "Трансфер управляемых документов",
"TransferDocumentsHint": "Документы, которые будут перенесены в выбранное пространство:",
-
"CreateFolder": "Создать новую папку",
"RenameFolder": "Переименовать папку",
"CreateChildFolder": "Создать подпапку",
-
"Obsolete": "Устаревший",
"MakeDocumentObsolete": "Пометить как устаревшее",
"MakeDocumentObsoleteDialog": "Пометить {count, plural, one {документ как устаревший} other {документы как устаревшие}}",
"MakeDocumentObsoleteConfirm": "Вы действительно хотите пометить следующие документы как устаревшие: {titles}?",
-
"LatestVersionHint": "последняя",
-
"CannotDeleteFolder": "Папка не может быть удалена",
"CannotDeleteFolderHint": "Пожалуйста, переместите все дочерние документы в другое место перед удалением папки.",
-
"AllDocumentSpaces": "Все пространства документов"
},
"controlledDocStates": {
diff --git a/plugins/controlled-documents-assets/lang/tr.json b/plugins/controlled-documents-assets/lang/tr.json
index b573ff98e9..5341cca335 100644
--- a/plugins/controlled-documents-assets/lang/tr.json
+++ b/plugins/controlled-documents-assets/lang/tr.json
@@ -2,14 +2,6 @@
"string": {
"Export": "Dışa aktar",
"Import": "İçe aktar",
- "ImportingDocument": "Belge içe aktarılıyor",
- "ConvertingDocument": "Belge dönüştürülüyor…",
- "ImportingFromWord": "Word'den içe aktarılıyor",
- "ConvertingWordDocument": "Belge dönüştürülüyor…",
- "DocumentConverted": "Belge dönüştürüldü",
- "ImportFailed": "İçe aktarma başarısız",
- "ReviewImportedChanges": "İçe aktarılan değişiklikleri gözden geçir",
- "Apply": "Uygula",
"ExportToWord": "Word'e aktar",
"ImportFromWord": "Word'den içe aktar",
"ID": "ID",
@@ -46,7 +38,6 @@
"Document": "Doküman",
"NewDocumentDialogClose": "Bu diyalogu kapatmak istiyor musunuz?",
"NewDocumentCloseNote": "Tüm değişiklikler kaybolacak",
- "Cancel": "İptal",
"EditorPlaceholder": "düzenlemeye başlamak için yazın...",
"Version": "Sürüm",
"TemplateVersion": "Şablon sürümü",
diff --git a/plugins/controlled-documents-assets/lang/zh.json b/plugins/controlled-documents-assets/lang/zh.json
index 9315824d7c..78a8b2ed34 100644
--- a/plugins/controlled-documents-assets/lang/zh.json
+++ b/plugins/controlled-documents-assets/lang/zh.json
@@ -2,14 +2,6 @@
"string": {
"Export": "导出",
"Import": "导入",
- "ImportingDocument": "正在导入文档",
- "ConvertingDocument": "正在转换文档…",
- "ImportingFromWord": "正在从 Word 导入",
- "ConvertingWordDocument": "正在转换文档…",
- "DocumentConverted": "文档已转换",
- "ImportFailed": "导入失败",
- "ReviewImportedChanges": "查看导入的更改",
- "Apply": "应用",
"ExportToWord": "导出为 Word",
"ImportFromWord": "从 Word 导入",
"ID": "ID",
@@ -46,7 +38,6 @@
"Document": "文档",
"NewDocumentDialogClose": "您想要关闭此对话框吗?",
"NewDocumentCloseNote": "所有更改将会丢失",
- "Cancel": "取消",
"EditorPlaceholder": "开始编辑...",
"Version": "版本",
"TemplateVersion": "模板版本",
@@ -67,32 +58,24 @@
"Approval": "批准",
"Reviewer": "审查人",
"Approver": "批准人",
-
"DeleteCategory": "删除类别?",
"DeleteCategoryHint": "此操作无法撤销",
"DeleteCategoryWarning": "该类别正在使用,无法删除",
-
"Latest": "最新",
"Draft": "草稿",
-
"Reviewers": "审查人",
-
"ViewMode": "查看",
"EditMode": "编辑",
"ComparisonMode": "比较",
-
"Compare": "比较:",
"Against": "对比:",
"RemovedAttachments": "已移除的附件",
"Restore": "恢复",
-
"ComparisonModeNotSupported": "不支持比较模式。",
-
"CreateDraft": "创建草稿",
"SendForApproval": "发送批准",
"SendForReview": "发送审查",
"CompleteReview": "完成审查",
-
"Approve": "批准",
"Reject": "拒绝",
"ConfirmApproval": "确认批准",
@@ -107,7 +90,6 @@
"AddApprovalDescription4": "如果计划培训,培训的状态为 '已发布'",
"NoApprovalsDescription": "此版本的文档没有获得批准",
"CurrentVersion": "当前版本",
-
"DocumentTemplate": "模板",
"DocumentTemplates": "模板",
"DocumentCode": "文档代码",
@@ -128,19 +110,16 @@
"ShowResolved": "显示已解决的评论",
"Ordering": "排序",
"Title": "标题",
-
"Effective": "生效",
"Archived": "已归档",
"Deleted": "已删除",
"MetaAbstract": "摘要",
-
"ContentTab": "内容",
"TeamTab": "团队",
"MetaTab": "元数据",
"ChangeControlTab": "变更控制",
"ReleaseTab": "发布",
"HistoryTab": "历史",
-
"ModificationDate": "修改日期",
"Modified": "已修改",
"Owner": "所有者",
@@ -148,7 +127,6 @@
"Unassigned": "未分配",
"Untitled": "无标题",
"Copy": "复制",
-
"AccessWorkarea": "访问工作区",
"EffectiveLibrary": "有效的文库",
"WorkingLibrary": "工作文库",
@@ -158,10 +136,8 @@
"ReassignOwnershipToAnotherUser": "重新分配所有权给其他用户",
"MakeDocumentEffective": "使文档生效",
"CreateDraftQmsTemplates": "创建 QMS 模板草稿",
-
"ChangeControl": "变更控制",
"ReviewInterval": "审查间隔",
-
"SelectReviewers": "选择审查人",
"SelectApprovers": "选择批准人",
"RequestsToReviewTheDoc": "请求您审查文档",
@@ -170,19 +146,15 @@
"Template": "模板",
"GeneralInfo": "常规信息",
"InProgress": "进行中",
-
"EditDescription": "编辑描述",
"EditGuidance": "编辑指导",
-
"NewDocument": "新文档",
"NewDocumentCategory": "新类别",
"NewDocumentTemplate": "新模板",
-
"LocationStepTitle": "位置",
"TemplateStepTitle": "模板",
"InfoStepTitle": "信息",
"TeamStepTitle": "团队",
-
"TitleAndDescr": "标题和描述",
"Reason": "原因",
"AbstractPlaceholder": "这份文档是关于什么的?谁需要它以及何时需要?...",
@@ -191,17 +163,13 @@
"NewTemplatePlaceholder": "这个模板是关于什么的?描述如何正确使用它...",
"CustomReason": "自定义",
"ReasonPlaceholder": "指定原因...",
-
"EditDocument": "编辑文档",
-
"Key": "键",
"CommentsSequence": "评论顺序",
-
"Email": "电子邮件",
"Password": "密码",
"FieldIsEmpty": "{field} 为空",
"ValidatingCredentials": "验证凭据...",
-
"GeneralDocumentation": "常规文档",
"TechnicalDocumentation": "技术文档",
"UnsortedTemplates": "未整理模板",
@@ -209,52 +177,39 @@
"Projects": "项目",
"ExternalSpace": "项目空间",
"DocumentSpaceType": "文档空间类型",
-
"EffectiveImmediately": "批准后立即生效",
"EffectiveOn": "生效自",
-
"PeriodicReviewToBeCompleted": "定期审查需在以下时间内完成",
"MonthsAfterEffectiveDate": "在生效日期后的几个月内",
"ToBePassedWithin": "需在以下时间内完成",
"AttemptsAnd": "尝试并",
"DaysAfterEffectiveDate": "在生效日期后的几天内",
-
"Index": "索引",
"Path": "路径",
-
"CreateChildDocument": "创建子文档",
"CreateChildTemplate": "创建子模板",
-
"All": "全部",
-
"Space": "空间",
"SelectParent": "为您的文档选择父级对象",
-
"PrefixInUse": "此前缀已被使用",
"CodeInUse": "此代码已被使用",
"ChangeCode": "更改代码",
"ChangePrefix": "更改前缀",
-
"MarkDocAsDeleted": "标记文档为已删除",
"MarkDocsAsDeleted": "标记多个文档为已删除",
"MarkDocAsDeletedConfirm": "您真的想将以下文档标记为已删除吗:{titles}?",
"ArchiveDocs": "归档 {count, plural, =0 {文档} other {文档}}",
"ArchiveDocsConfirm": "您真的想将以下文档归档吗:{titles}?",
-
"DocumentInHierarchy": "层级中的文档",
"FirstDraftVersion": "这是文档的第一个草稿版本。尚无历史记录。",
"FirstOrNotAvailable": "这是文档的第一个可用版本。尚无历史记录或不可用。",
-
"EffectiveDocumentLifecycle": "有效的文档生命周期",
-
"ReasonAndImpact": "原因与影响",
"ImpactAnalysis": "影响分析",
"ImpactedDocuments": "受影响的文档",
-
"CreateDocumentFailed": "创建文档失败",
"CreateDocumentTemplateFailed": "创建模板失败",
"TryAgain": "请重试",
-
"DescribeChanges": "描述更改内容...",
"DescribeReason": "描述更改原因...",
"DescribeImpact": "影响到...",
@@ -279,17 +234,13 @@
"Of": " 共 ",
"CreatedFromTemplate": "从模板创建:",
"UncontrolledCopy": "非受控副本",
-
"ViewAll": "查看全部",
"Readonly": "只读",
-
"NewDocumentSpace": "新文档空间",
"EditDocumentSpace": "编辑文档空间",
-
"DocSpaceDescriptionPlaceholder": "描述您的空间...",
"Members": "成员",
"CreateOrgSpace": "创建组织空间",
-
"ReviewDocumentPermission": "审查文档",
"ReviewDocumentDescription": "授予用户审查文档的权限",
"ApproveDocumentPermission": "批准文档",
@@ -302,7 +253,6 @@
"CreateDocumentDescription": "授予用户创建文档的权限",
"UpdateDocumentOwnerPermission": "更新文档所有者",
"UpdateDocumentOwnerDescription": "授予用户更新文档所有者的权限",
-
"CreateDocumentCategoryPermission": "创建文档类别",
"CreateDocumentCategoryDescription": "授予用户创建文档类别的权限",
"UpdateDocumentCategoryPermission": "更新文档类别",
@@ -311,26 +261,20 @@
"DeleteDocumentCategoryDescription": "授予用户删除文档类别的权限",
"ConfigLabel": "受控文档",
"ConfigDescription": "用于管理受控文档的扩展",
-
"Transfer": "转让",
"TransferWarning": "执行此操作后,某些团队成员可能会失去查看或编辑此文档的能力",
"TransferDocuments": "移交受控文件",
"TransferDocumentsHint": "要转移到所选空间的文件:",
-
"CreateFolder": "创建新文件夹",
"RenameFolder": "重命名文件夹",
"CreateChildFolder": "创建子文件夹",
-
"Obsolete": "已过时",
"MakeDocumentObsolete": "标记为过时",
"MakeDocumentObsoleteDialog": "标记 {count, plural, one {文档为过时} other {文档为过时}}",
"MakeDocumentObsoleteConfirm": "您确定要将以下文档标记为过时吗:{titles}?",
-
"LatestVersionHint": "最新",
-
"CannotDeleteFolder": "无法删除文件夹",
"CannotDeleteFolderHint": "请在删除文件夹之前将所有子文档移动到其他位置。",
-
"AllDocumentSpaces": "所有文档空间"
},
"controlledDocStates": {
diff --git a/plugins/controlled-documents-resources/package.json b/plugins/controlled-documents-resources/package.json
index 2cc0b0906c..1a07f5659b 100644
--- a/plugins/controlled-documents-resources/package.json
+++ b/plugins/controlled-documents-resources/package.json
@@ -59,7 +59,6 @@
"@hcengineering/text": "workspace:^0.7.19",
"@hcengineering/text-editor": "workspace:^0.7.0",
"@hcengineering/text-editor-resources": "workspace:^0.7.0",
- "@hcengineering/export": "workspace:^0.7.0",
"@hcengineering/collaborator-client": "workspace:^0.7.18",
"@hcengineering/activity": "workspace:^0.7.0",
"@hcengineering/request": "workspace:^0.7.0",
diff --git a/plugins/controlled-documents-resources/src/components/document/ExportFormatPopup.svelte b/plugins/controlled-documents-resources/src/components/document/ExportFormatPopup.svelte
deleted file mode 100644
index 13f0990ec6..0000000000
--- a/plugins/controlled-documents-resources/src/components/document/ExportFormatPopup.svelte
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
- {
- const format = evt.detail
- if (typeof format === 'string' && doc !== undefined) {
- void exportDocument(doc, format)
- }
- dispatch('close')
- }}
-/>
diff --git a/plugins/controlled-documents-resources/src/components/document/ImportFormatPopup.svelte b/plugins/controlled-documents-resources/src/components/document/ImportFormatPopup.svelte
deleted file mode 100644
index ca8543b073..0000000000
--- a/plugins/controlled-documents-resources/src/components/document/ImportFormatPopup.svelte
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
- {
- const format = evt.detail
- if (typeof format === 'string' && doc !== undefined) {
- void importDocument(doc, format)
- }
- dispatch('close')
- }}
-/>
diff --git a/plugins/controlled-documents-resources/src/docxActions.ts b/plugins/controlled-documents-resources/src/docxActions.ts
deleted file mode 100644
index d717699f3b..0000000000
--- a/plugins/controlled-documents-resources/src/docxActions.ts
+++ /dev/null
@@ -1,158 +0,0 @@
-//
-// Copyright © 2026 TraceX SAS.
-//
-// Licensed under the PolyForm Shield License 1.0.0 (the "License");
-// you may not use this file except in compliance with the License. You may
-// obtain a copy of the License at https://polyformproject.org/licenses/shield/1.0.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-import attachment from '@hcengineering/attachment'
-import { getClient as getCollaboratorClient } from '@hcengineering/collaborator-client'
-import { makeDocCollabId } from '@hcengineering/core'
-import { type ControlledDocument } from '@hcengineering/controlled-documents'
-import exportPlugin from '@hcengineering/export'
-import { getMetadata, getResource, setPlatformStatus, translate, unknownError } from '@hcengineering/platform'
-import presentation from '@hcengineering/presentation'
-import { jsonToMarkup, type MarkupNode } from '@hcengineering/text'
-import { showPopup, withProgress } from '@hcengineering/ui'
-import { getCurrentLanguage } from '@hcengineering/theme'
-
-import ImportDocxPopup from './components/document/ImportDocxPopup.svelte'
-import plugin from './plugin'
-
-function getExportBaseUrl (): string {
- const url = getMetadata(exportPlugin.metadata.ExportUrl)
- if (url === undefined || url === '') {
- throw new Error('Export service URL (export.metadata.ExportUrl) is not configured')
- }
- return url
-}
-
-function getToken (): string {
- return getMetadata(presentation.metadata.Token) ?? ''
-}
-
-function authHeaders (): Record {
- return {
- Authorization: `Bearer ${getToken()}`,
- 'Content-Type': 'application/json'
- }
-}
-
-/** Export a document's body in the given format ('docx' | 'md') and download it. */
-export async function exportDocument (doc: ControlledDocument, format: string): Promise {
- const response = await fetch(`${getExportBaseUrl()}/document-export`, {
- method: 'POST',
- headers: authHeaders(),
- body: JSON.stringify({ _class: doc._class, _id: doc._id, format })
- })
- if (!response.ok) {
- throw new Error('Failed to export document')
- }
-
- const blob = await response.blob()
- const contentDisposition = response.headers.get('Content-Disposition')
- const filename = contentDisposition?.match(/filename="([^"]*)"/)?.[1] ?? `${doc.title ?? 'document'}.${format}`
-
- // Attach the anchor to the DOM before click() (detached anchors are ignored by some
- // browsers) and defer the revoke — revoking synchronously drops the blob mid-read.
- const url = window.URL.createObjectURL(blob)
- const anchor = document.createElement('a')
- anchor.style.display = 'none'
- anchor.href = url
- anchor.download = filename
- document.body.appendChild(anchor)
- anchor.click()
- setTimeout(() => {
- document.body.removeChild(anchor)
- window.URL.revokeObjectURL(url)
- }, 10000)
-}
-
-/** Import an edited document ('docx' | 'md'): convert, preview the diff, apply. */
-export async function importDocument (doc: ControlledDocument, format: string): Promise {
- const accept = format === 'md' ? '.md,.markdown' : '.docx'
- const file = await pickFile(accept)
- if (file === undefined) {
- return
- }
-
- const lang = getCurrentLanguage()
- let converted: { current: MarkupNode, candidate: MarkupNode }
- try {
- // Conversion can take a while with no incremental progress, so a shared
- // long-running-task toast shows a spinner until it settles.
- converted = await withProgress(
- {
- title: await translate(plugin.string.ImportingDocument, {}, lang),
- message: await translate(plugin.string.ConvertingDocument, {}, lang),
- done: await translate(plugin.string.DocumentConverted, {}, lang),
- failed: await translate(plugin.string.ImportFailed, {}, lang)
- },
- async () => {
- const uploadFile = await getResource(attachment.helper.UploadFile)
- const { uuid } = await uploadFile(file)
-
- const diffResponse = await fetch(`${getExportBaseUrl()}/document-import`, {
- method: 'POST',
- headers: authHeaders(),
- body: JSON.stringify({ blobId: uuid, _class: doc._class, _id: doc._id, format })
- })
- if (!diffResponse.ok) {
- throw new Error('Failed to convert document')
- }
- return (await diffResponse.json()) as { current: MarkupNode, candidate: MarkupNode }
- }
- )
- } catch {
- // The progress toast already surfaced the failure.
- return
- }
-
- showPopup(ImportDocxPopup, { current: converted.current, candidate: converted.candidate }, undefined, (apply) => {
- if (apply === true) {
- void applyImportedContent(doc, converted.candidate).catch((err) => {
- void setPlatformStatus(unknownError(err))
- })
- }
- })
-}
-
-async function applyImportedContent (doc: ControlledDocument, markup: MarkupNode): Promise {
- // NOTE: writes into the current (Draft) document's content. Creating a brand-new
- // version/snapshot before applying (createNewDraftForControlledDoc + snapshot) is a
- // follow-up — it needs project/version resolution owned by the CD "new draft" flow.
- //
- // The write goes through the collaborator (updateMarkup), NOT a raw content-blob
- // write: the editor and collaborator serve the live Y.Doc, and a document that has
- // ever been opened has a Y.Doc blob that takes precedence over the JSON content blob.
- // Only updateMarkup updates that live Y.Doc, so the change actually becomes visible.
- const token = getMetadata(presentation.metadata.Token) ?? ''
- const collaboratorUrl = getMetadata(presentation.metadata.CollaboratorUrl) ?? ''
- const workspace = getMetadata(presentation.metadata.WorkspaceUuid)
- if (workspace === undefined || collaboratorUrl === '') {
- throw new Error('Collaborator service is not configured')
- }
-
- const collaborator = getCollaboratorClient(workspace, token, collaboratorUrl)
- await collaborator.updateMarkup(makeDocCollabId(doc, 'content'), jsonToMarkup(markup))
-}
-
-async function pickFile (accept: string): Promise {
- return await new Promise((resolve) => {
- const input = document.createElement('input')
- input.type = 'file'
- input.accept = accept
- input.onchange = () => {
- resolve(input.files?.[0])
- }
- input.click()
- })
-}
diff --git a/plugins/controlled-documents-resources/src/index.ts b/plugins/controlled-documents-resources/src/index.ts
index 97d2e7984a..4f9e39176e 100644
--- a/plugins/controlled-documents-resources/src/index.ts
+++ b/plugins/controlled-documents-resources/src/index.ts
@@ -42,8 +42,6 @@ import QmsTemplateWizard from './components/create-doc/QmsTemplateWizard.svelte'
import DocumentStatusTag from './components/document/common/DocumentStatusTag.svelte'
import AddCommentPopup from './components/document/popups/AddCommentPopup.svelte'
import ChangeOwnerPopup from './components/document/popups/ChangeOwnerPopup.svelte'
-import ExportFormatPopup from './components/document/ExportFormatPopup.svelte'
-import ImportFormatPopup from './components/document/ImportFormatPopup.svelte'
import DocumentCommentsPopup from './components/document/popups/DocumentCommentsPopup.svelte'
import DocumentPresenter from './components/document/presenters/DocumentPresenter.svelte'
import OwnerPresenter from './components/document/presenters/OwnerPresenter.svelte'
@@ -403,8 +401,6 @@ export default async (): Promise => ({
AddCommentPopup,
DocumentCommentsPopup,
ChangeOwnerPopup,
- ExportFormatPopup,
- ImportFormatPopup,
DeleteCategoryPopup,
Projects,
ProjectPresenter,
diff --git a/plugins/controlled-documents-resources/src/plugin.ts b/plugins/controlled-documents-resources/src/plugin.ts
index b6f87b0a9f..ccc7141443 100644
--- a/plugins/controlled-documents-resources/src/plugin.ts
+++ b/plugins/controlled-documents-resources/src/plugin.ts
@@ -50,15 +50,6 @@ export default mergeIds(documentsId, documents, {
string: {
ID: '' as IntlString,
ValidationWorkflow: '' as IntlString,
- Cancel: '' as IntlString,
- ReviewImportedChanges: '' as IntlString,
- Apply: '' as IntlString,
- ImportingFromWord: '' as IntlString,
- ImportingDocument: '' as IntlString,
- ConvertingDocument: '' as IntlString,
- ConvertingWordDocument: '' as IntlString,
- DocumentConverted: '' as IntlString,
- ImportFailed: '' as IntlString,
NewDocumentDialogClose: '' as IntlString,
NewDocumentCloseNote: '' as IntlString,
CreateDocumentCategory: '' as IntlString,
diff --git a/plugins/controlled-documents/src/plugin.ts b/plugins/controlled-documents/src/plugin.ts
index 6a33d385dc..0a8f161f82 100644
--- a/plugins/controlled-documents/src/plugin.ts
+++ b/plugins/controlled-documents/src/plugin.ts
@@ -108,9 +108,7 @@ export const documentsPlugin = plugin(documentsId, {
DocumentVersionPresenter: '' as AnyComponent,
DeleteCategoryPopup: '' as AnyComponent,
DocumentIcon: '' as AnyComponent,
- CreateFolder: '' as AnyComponent,
- ExportFormatPopup: '' as AnyComponent,
- ImportFormatPopup: '' as AnyComponent
+ CreateFolder: '' as AnyComponent
},
action: {
ChangeDocumentOwner: '' as Ref>,
diff --git a/plugins/export-assets/lang/cs.json b/plugins/export-assets/lang/cs.json
index dc0fb2aa01..fd25681799 100644
--- a/plugins/export-assets/lang/cs.json
+++ b/plugins/export-assets/lang/cs.json
@@ -59,6 +59,19 @@
"ExportMarkdown": "Markdown",
"ExportScopeSelected": "Vybrané ({count})",
"ExportScopeLoaded": "Načtené na této stránce ({count})",
- "ExportFileName": "Název souboru"
+ "ExportFileName": "Název souboru",
+ "ExportFormatWord": "Word (.docx)",
+ "ExportFormatMarkdown": "Markdown (.md)",
+ "ExportDocumentContent": "Exportovat obsah",
+ "ImportDocumentContent": "Importovat obsah",
+ "ExportingDocumentContent": "Export dokumentu…",
+ "DocumentContentExported": "Dokument exportován",
+ "DocumentContentExportFailed": "Export selhal",
+ "ImportingDocumentContent": "Import dokumentu",
+ "ConvertingDocumentContent": "Převod dokumentu…",
+ "DocumentContentConverted": "Dokument převeden",
+ "DocumentContentImportFailed": "Import selhal",
+ "ReviewDocumentContentChanges": "Zkontrolovat importované změny",
+ "ApplyDocumentContentChanges": "Použít"
}
}
diff --git a/plugins/export-assets/lang/de.json b/plugins/export-assets/lang/de.json
index d9901d594f..e9250c616a 100644
--- a/plugins/export-assets/lang/de.json
+++ b/plugins/export-assets/lang/de.json
@@ -59,6 +59,19 @@
"ExportMarkdown": "Markdown",
"ExportScopeSelected": "Ausgewählte ({count})",
"ExportScopeLoaded": "Auf dieser Seite geladen ({count})",
- "ExportFileName": "Dateiname"
+ "ExportFileName": "Dateiname",
+ "ExportFormatWord": "Word (.docx)",
+ "ExportFormatMarkdown": "Markdown (.md)",
+ "ExportDocumentContent": "Inhalt exportieren",
+ "ImportDocumentContent": "Inhalt importieren",
+ "ExportingDocumentContent": "Dokument wird exportiert…",
+ "DocumentContentExported": "Dokument exportiert",
+ "DocumentContentExportFailed": "Export fehlgeschlagen",
+ "ImportingDocumentContent": "Dokument wird importiert",
+ "ConvertingDocumentContent": "Dokument wird konvertiert…",
+ "DocumentContentConverted": "Dokument konvertiert",
+ "DocumentContentImportFailed": "Import fehlgeschlagen",
+ "ReviewDocumentContentChanges": "Importierte Änderungen prüfen",
+ "ApplyDocumentContentChanges": "Übernehmen"
}
}
diff --git a/plugins/export-assets/lang/en.json b/plugins/export-assets/lang/en.json
index 9386c8e01c..ca0aaa24de 100644
--- a/plugins/export-assets/lang/en.json
+++ b/plugins/export-assets/lang/en.json
@@ -59,6 +59,20 @@
"ExportMarkdown": "Markdown",
"ExportScopeSelected": "Selected ({count})",
"ExportScopeLoaded": "Loaded on this page ({count})",
- "ExportFileName": "File name"
+ "ExportFileName": "File name",
+
+ "ExportFormatWord": "Word (.docx)",
+ "ExportFormatMarkdown": "Markdown (.md)",
+ "ExportDocumentContent": "Export content",
+ "ImportDocumentContent": "Import content",
+ "ExportingDocumentContent": "Exporting document…",
+ "DocumentContentExported": "Document exported",
+ "DocumentContentExportFailed": "Export failed",
+ "ImportingDocumentContent": "Importing document",
+ "ConvertingDocumentContent": "Converting document…",
+ "DocumentContentConverted": "Document converted",
+ "DocumentContentImportFailed": "Import failed",
+ "ReviewDocumentContentChanges": "Review imported changes",
+ "ApplyDocumentContentChanges": "Apply"
}
}
diff --git a/plugins/export-assets/lang/es.json b/plugins/export-assets/lang/es.json
index e1dcfe2aa2..5fcaabc9d3 100644
--- a/plugins/export-assets/lang/es.json
+++ b/plugins/export-assets/lang/es.json
@@ -59,6 +59,19 @@
"ExportMarkdown": "Markdown",
"ExportScopeSelected": "Seleccionados ({count})",
"ExportScopeLoaded": "Cargados en esta página ({count})",
- "ExportFileName": "Nombre del archivo"
+ "ExportFileName": "Nombre del archivo",
+ "ExportFormatWord": "Word (.docx)",
+ "ExportFormatMarkdown": "Markdown (.md)",
+ "ExportDocumentContent": "Exportar contenido",
+ "ImportDocumentContent": "Importar contenido",
+ "ExportingDocumentContent": "Exportando el documento…",
+ "DocumentContentExported": "Documento exportado",
+ "DocumentContentExportFailed": "Error de exportación",
+ "ImportingDocumentContent": "Importando el documento",
+ "ConvertingDocumentContent": "Convirtiendo el documento…",
+ "DocumentContentConverted": "Documento convertido",
+ "DocumentContentImportFailed": "Error de importación",
+ "ReviewDocumentContentChanges": "Revisar los cambios importados",
+ "ApplyDocumentContentChanges": "Aplicar"
}
}
diff --git a/plugins/export-assets/lang/fr.json b/plugins/export-assets/lang/fr.json
index 7bb68d31c0..1dd1f25850 100644
--- a/plugins/export-assets/lang/fr.json
+++ b/plugins/export-assets/lang/fr.json
@@ -59,6 +59,19 @@
"ExportMarkdown": "Markdown",
"ExportScopeSelected": "Sélectionnés ({count})",
"ExportScopeLoaded": "Chargés sur cette page ({count})",
- "ExportFileName": "Nom du fichier"
+ "ExportFileName": "Nom du fichier",
+ "ExportFormatWord": "Word (.docx)",
+ "ExportFormatMarkdown": "Markdown (.md)",
+ "ExportDocumentContent": "Exporter le contenu",
+ "ImportDocumentContent": "Importer le contenu",
+ "ExportingDocumentContent": "Export du document…",
+ "DocumentContentExported": "Document exporté",
+ "DocumentContentExportFailed": "Échec de l'export",
+ "ImportingDocumentContent": "Import du document",
+ "ConvertingDocumentContent": "Conversion du document…",
+ "DocumentContentConverted": "Document converti",
+ "DocumentContentImportFailed": "Échec de l'import",
+ "ReviewDocumentContentChanges": "Vérifier les modifications importées",
+ "ApplyDocumentContentChanges": "Appliquer"
}
}
diff --git a/plugins/export-assets/lang/it.json b/plugins/export-assets/lang/it.json
index 453d606473..01531ed938 100644
--- a/plugins/export-assets/lang/it.json
+++ b/plugins/export-assets/lang/it.json
@@ -59,6 +59,19 @@
"ExportMarkdown": "Markdown",
"ExportScopeSelected": "Selezionati ({count})",
"ExportScopeLoaded": "Caricati in questa pagina ({count})",
- "ExportFileName": "Nome file"
+ "ExportFileName": "Nome file",
+ "ExportFormatWord": "Word (.docx)",
+ "ExportFormatMarkdown": "Markdown (.md)",
+ "ExportDocumentContent": "Esporta contenuto",
+ "ImportDocumentContent": "Importa contenuto",
+ "ExportingDocumentContent": "Esportazione del documento…",
+ "DocumentContentExported": "Documento esportato",
+ "DocumentContentExportFailed": "Esportazione non riuscita",
+ "ImportingDocumentContent": "Importazione del documento",
+ "ConvertingDocumentContent": "Conversione del documento…",
+ "DocumentContentConverted": "Documento convertito",
+ "DocumentContentImportFailed": "Importazione non riuscita",
+ "ReviewDocumentContentChanges": "Rivedi le modifiche importate",
+ "ApplyDocumentContentChanges": "Applica"
}
}
diff --git a/plugins/export-assets/lang/ja.json b/plugins/export-assets/lang/ja.json
index 0960aabcf0..59926fdf65 100644
--- a/plugins/export-assets/lang/ja.json
+++ b/plugins/export-assets/lang/ja.json
@@ -59,6 +59,19 @@
"ExportMarkdown": "Markdown",
"ExportScopeSelected": "選択項目 ({count})",
"ExportScopeLoaded": "このページに読み込み済み ({count})",
- "ExportFileName": "ファイル名"
+ "ExportFileName": "ファイル名",
+ "ExportFormatWord": "Word (.docx)",
+ "ExportFormatMarkdown": "Markdown (.md)",
+ "ExportDocumentContent": "コンテンツをエクスポート",
+ "ImportDocumentContent": "コンテンツをインポート",
+ "ExportingDocumentContent": "ドキュメントをエクスポート中…",
+ "DocumentContentExported": "ドキュメントをエクスポートしました",
+ "DocumentContentExportFailed": "エクスポートに失敗しました",
+ "ImportingDocumentContent": "ドキュメントをインポート中",
+ "ConvertingDocumentContent": "ドキュメントを変換中…",
+ "DocumentContentConverted": "ドキュメントを変換しました",
+ "DocumentContentImportFailed": "インポートに失敗しました",
+ "ReviewDocumentContentChanges": "インポートした変更を確認",
+ "ApplyDocumentContentChanges": "適用"
}
}
diff --git a/plugins/export-assets/lang/ko.json b/plugins/export-assets/lang/ko.json
index bae168b477..60ec10593e 100644
--- a/plugins/export-assets/lang/ko.json
+++ b/plugins/export-assets/lang/ko.json
@@ -59,6 +59,19 @@
"ExportMarkdown": "Markdown",
"ExportScopeSelected": "선택한 항목 ({count})",
"ExportScopeLoaded": "이 페이지에 불러온 항목 ({count})",
- "ExportFileName": "파일 이름"
+ "ExportFileName": "파일 이름",
+ "ExportFormatWord": "Word (.docx)",
+ "ExportFormatMarkdown": "Markdown (.md)",
+ "ExportDocumentContent": "콘텐츠 내보내기",
+ "ImportDocumentContent": "콘텐츠 가져오기",
+ "ExportingDocumentContent": "문서 내보내는 중…",
+ "DocumentContentExported": "문서 내보내기 완료",
+ "DocumentContentExportFailed": "내보내기 실패",
+ "ImportingDocumentContent": "문서 가져오는 중",
+ "ConvertingDocumentContent": "문서 변환 중…",
+ "DocumentContentConverted": "문서 변환 완료",
+ "DocumentContentImportFailed": "가져오기 실패",
+ "ReviewDocumentContentChanges": "가져온 변경사항 검토",
+ "ApplyDocumentContentChanges": "적용"
}
}
diff --git a/plugins/export-assets/lang/pl.json b/plugins/export-assets/lang/pl.json
index 9db712cd53..572cf1878b 100644
--- a/plugins/export-assets/lang/pl.json
+++ b/plugins/export-assets/lang/pl.json
@@ -57,6 +57,19 @@
"ExportMarkdown": "Markdown",
"ExportScopeSelected": "Wybrane ({count})",
"ExportScopeLoaded": "Załadowane na tej stronie ({count})",
- "ExportFileName": "Nazwa pliku"
+ "ExportFileName": "Nazwa pliku",
+ "ExportFormatWord": "Word (.docx)",
+ "ExportFormatMarkdown": "Markdown (.md)",
+ "ExportDocumentContent": "Eksportuj zawartość",
+ "ImportDocumentContent": "Importuj zawartość",
+ "ExportingDocumentContent": "Eksportowanie dokumentu…",
+ "DocumentContentExported": "Dokument wyeksportowany",
+ "DocumentContentExportFailed": "Eksport nie powiódł się",
+ "ImportingDocumentContent": "Importowanie dokumentu",
+ "ConvertingDocumentContent": "Konwertowanie dokumentu…",
+ "DocumentContentConverted": "Dokument przekonwertowany",
+ "DocumentContentImportFailed": "Import nie powiódł się",
+ "ReviewDocumentContentChanges": "Przejrzyj zaimportowane zmiany",
+ "ApplyDocumentContentChanges": "Zastosuj"
}
}
diff --git a/plugins/export-assets/lang/pt-br.json b/plugins/export-assets/lang/pt-br.json
index 7655ab653f..663152258a 100644
--- a/plugins/export-assets/lang/pt-br.json
+++ b/plugins/export-assets/lang/pt-br.json
@@ -60,6 +60,19 @@
"ExportMarkdown": "Markdown",
"ExportScopeSelected": "Selecionados ({count})",
"ExportScopeLoaded": "Carregados nesta página ({count})",
- "ExportFileName": "Nome do arquivo"
+ "ExportFileName": "Nome do arquivo",
+ "ExportFormatWord": "Word (.docx)",
+ "ExportFormatMarkdown": "Markdown (.md)",
+ "ExportDocumentContent": "Exportar conteúdo",
+ "ImportDocumentContent": "Importar conteúdo",
+ "ExportingDocumentContent": "Exportando o documento…",
+ "DocumentContentExported": "Documento exportado",
+ "DocumentContentExportFailed": "Falha na exportação",
+ "ImportingDocumentContent": "Importando o documento",
+ "ConvertingDocumentContent": "Convertendo o documento…",
+ "DocumentContentConverted": "Documento convertido",
+ "DocumentContentImportFailed": "Falha na importação",
+ "ReviewDocumentContentChanges": "Revisar as alterações importadas",
+ "ApplyDocumentContentChanges": "Aplicar"
}
}
diff --git a/plugins/export-assets/lang/pt.json b/plugins/export-assets/lang/pt.json
index 2d275dab00..4f925e7a35 100644
--- a/plugins/export-assets/lang/pt.json
+++ b/plugins/export-assets/lang/pt.json
@@ -59,6 +59,19 @@
"ExportMarkdown": "Markdown",
"ExportScopeSelected": "Selecionados ({count})",
"ExportScopeLoaded": "Carregados nesta página ({count})",
- "ExportFileName": "Nome do ficheiro"
+ "ExportFileName": "Nome do ficheiro",
+ "ExportFormatWord": "Word (.docx)",
+ "ExportFormatMarkdown": "Markdown (.md)",
+ "ExportDocumentContent": "Exportar conteúdo",
+ "ImportDocumentContent": "Importar conteúdo",
+ "ExportingDocumentContent": "A exportar o documento…",
+ "DocumentContentExported": "Documento exportado",
+ "DocumentContentExportFailed": "Falha na exportação",
+ "ImportingDocumentContent": "A importar o documento",
+ "ConvertingDocumentContent": "A converter o documento…",
+ "DocumentContentConverted": "Documento convertido",
+ "DocumentContentImportFailed": "Falha na importação",
+ "ReviewDocumentContentChanges": "Rever as alterações importadas",
+ "ApplyDocumentContentChanges": "Aplicar"
}
}
diff --git a/plugins/export-assets/lang/ru.json b/plugins/export-assets/lang/ru.json
index 4b1c3c7813..50fee0247a 100644
--- a/plugins/export-assets/lang/ru.json
+++ b/plugins/export-assets/lang/ru.json
@@ -59,6 +59,20 @@
"ExportMarkdown": "Markdown",
"ExportScopeSelected": "Выделенные ({count})",
"ExportScopeLoaded": "Загруженные на странице ({count})",
- "ExportFileName": "Имя файла"
+ "ExportFileName": "Имя файла",
+
+ "ExportFormatWord": "Word (.docx)",
+ "ExportFormatMarkdown": "Markdown (.md)",
+ "ExportDocumentContent": "Экспорт содержимого",
+ "ImportDocumentContent": "Импорт содержимого",
+ "ExportingDocumentContent": "Экспорт документа…",
+ "DocumentContentExported": "Документ экспортирован",
+ "DocumentContentExportFailed": "Ошибка экспорта",
+ "ImportingDocumentContent": "Импорт документа",
+ "ConvertingDocumentContent": "Конвертация документа…",
+ "DocumentContentConverted": "Документ сконвертирован",
+ "DocumentContentImportFailed": "Ошибка импорта",
+ "ReviewDocumentContentChanges": "Просмотрите импортированные изменения",
+ "ApplyDocumentContentChanges": "Применить"
}
}
diff --git a/plugins/export-assets/lang/tr.json b/plugins/export-assets/lang/tr.json
index c5fa556e50..86c32fdbd3 100644
--- a/plugins/export-assets/lang/tr.json
+++ b/plugins/export-assets/lang/tr.json
@@ -59,6 +59,19 @@
"ExportMarkdown": "Markdown",
"ExportScopeSelected": "Seçili ({count})",
"ExportScopeLoaded": "Bu sayfada yüklü ({count})",
- "ExportFileName": "Dosya adı"
+ "ExportFileName": "Dosya adı",
+ "ExportFormatWord": "Word (.docx)",
+ "ExportFormatMarkdown": "Markdown (.md)",
+ "ExportDocumentContent": "İçeriği dışa aktar",
+ "ImportDocumentContent": "İçeriği içe aktar",
+ "ExportingDocumentContent": "Belge dışa aktarılıyor…",
+ "DocumentContentExported": "Belge dışa aktarıldı",
+ "DocumentContentExportFailed": "Dışa aktarma başarısız",
+ "ImportingDocumentContent": "Belge içe aktarılıyor",
+ "ConvertingDocumentContent": "Belge dönüştürülüyor…",
+ "DocumentContentConverted": "Belge dönüştürüldü",
+ "DocumentContentImportFailed": "İçe aktarma başarısız",
+ "ReviewDocumentContentChanges": "İçe aktarılan değişiklikleri gözden geçir",
+ "ApplyDocumentContentChanges": "Uygula"
}
}
diff --git a/plugins/export-assets/lang/zh.json b/plugins/export-assets/lang/zh.json
index 96794e765b..8558d98af9 100644
--- a/plugins/export-assets/lang/zh.json
+++ b/plugins/export-assets/lang/zh.json
@@ -59,6 +59,19 @@
"ExportMarkdown": "Markdown",
"ExportScopeSelected": "已选 ({count})",
"ExportScopeLoaded": "本页已加载 ({count})",
- "ExportFileName": "文件名"
+ "ExportFileName": "文件名",
+ "ExportFormatWord": "Word (.docx)",
+ "ExportFormatMarkdown": "Markdown (.md)",
+ "ExportDocumentContent": "导出内容",
+ "ImportDocumentContent": "导入内容",
+ "ExportingDocumentContent": "正在导出文档…",
+ "DocumentContentExported": "文档已导出",
+ "DocumentContentExportFailed": "导出失败",
+ "ImportingDocumentContent": "正在导入文档",
+ "ConvertingDocumentContent": "正在转换文档…",
+ "DocumentContentConverted": "文档已转换",
+ "DocumentContentImportFailed": "导入失败",
+ "ReviewDocumentContentChanges": "查看导入的更改",
+ "ApplyDocumentContentChanges": "应用"
}
}
diff --git a/plugins/export-resources/package.json b/plugins/export-resources/package.json
index 56bca0ad9e..499df9f320 100644
--- a/plugins/export-resources/package.json
+++ b/plugins/export-resources/package.json
@@ -49,6 +49,10 @@
"@hcengineering/theme": "workspace:^0.7.0",
"@hcengineering/view": "workspace:^0.7.0",
"@hcengineering/view-resources": "workspace:^0.7.0",
- "@hcengineering/converter": "workspace:^0.7.0"
+ "@hcengineering/converter": "workspace:^0.7.0",
+ "@hcengineering/attachment": "workspace:^0.7.0",
+ "@hcengineering/collaborator-client": "workspace:^0.7.18",
+ "@hcengineering/text": "workspace:^0.7.19",
+ "@hcengineering/text-editor-resources": "workspace:^0.7.0"
}
}
diff --git a/plugins/export-resources/src/document/actions.ts b/plugins/export-resources/src/document/actions.ts
new file mode 100644
index 0000000000..7fc301ca5e
--- /dev/null
+++ b/plugins/export-resources/src/document/actions.ts
@@ -0,0 +1,172 @@
+//
+// Copyright © 2026 TraceX SAS.
+//
+// Licensed under the PolyForm Shield License 1.0.0 (the "License");
+// you may not use this file except in compliance with the License. You may
+// obtain a copy of the License at https://polyformproject.org/licenses/shield/1.0.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//
+
+// Shared export/import of a Doc's collaborative "content" field (round-tripping through
+// Word/Markdown via the pod-export service). Originally written for controlled documents,
+// generalized so it can be reused for any class whose content is a collaborative markup
+// field named `content` (e.g. Card) — see server-side `exportDocumentHandler` in
+// services/export/pod-export, which resolves the field generically by that name.
+
+import attachment from '@hcengineering/attachment'
+import { getClient as getCollaboratorClient } from '@hcengineering/collaborator-client'
+import { type Doc, makeDocCollabId } from '@hcengineering/core'
+import exportPlugin from '@hcengineering/export'
+import { getMetadata, getResource, setPlatformStatus, translate, unknownError } from '@hcengineering/platform'
+import presentation from '@hcengineering/presentation'
+import { jsonToMarkup, type MarkupNode } from '@hcengineering/text'
+import { showPopup, withProgress } from '@hcengineering/ui'
+import { getCurrentLanguage } from '@hcengineering/theme'
+
+import { downloadBlob, fileNameFromResponse } from '../download'
+import DocumentImportDiffPopup from './components/DocumentImportDiffPopup.svelte'
+
+function getExportBaseUrl (): string {
+ const url = getMetadata(exportPlugin.metadata.ExportUrl)
+ if (url === undefined || url === '') {
+ throw new Error('Export service URL (export.metadata.ExportUrl) is not configured')
+ }
+ return url
+}
+
+function getToken (): string {
+ return getMetadata(presentation.metadata.Token) ?? ''
+}
+
+function authHeaders (): Record {
+ return {
+ Authorization: `Bearer ${getToken()}`,
+ 'Content-Type': 'application/json'
+ }
+}
+
+async function readErrorMessage (response: Response): Promise {
+ const body = await response.json().catch((): undefined => undefined)
+ return typeof body?.message === 'string' && body.message.length > 0 ? body.message : undefined
+}
+
+/** Any object with a collaborative `content` blob field, addressable as a doc (Card, ControlledDocument, ...). */
+export type DocumentContentTarget = Pick & { title?: string }
+
+/** Export a doc's `content` field in the given format ('docx' | 'md') and download it. */
+export async function exportDocumentContent (doc: DocumentContentTarget, format: string): Promise {
+ const lang = getCurrentLanguage()
+ try {
+ // The conversion can take a while with no incremental progress, so a shared
+ // long-running-task toast shows a spinner until it settles and surfaces failures
+ // (e.g. content the exporter can't convert) instead of silently doing nothing.
+ await withProgress(
+ {
+ title: await translate(exportPlugin.string.ExportingDocumentContent, {}, lang),
+ done: await translate(exportPlugin.string.DocumentContentExported, {}, lang),
+ failed: await translate(exportPlugin.string.DocumentContentExportFailed, {}, lang)
+ },
+ async () => {
+ const response = await fetch(`${getExportBaseUrl()}/document-export`, {
+ method: 'POST',
+ headers: authHeaders(),
+ body: JSON.stringify({ _class: doc._class, _id: doc._id, format })
+ })
+ if (!response.ok) {
+ const message = await readErrorMessage(response)
+ throw new Error(message ?? `Failed to export document (${response.status})`)
+ }
+
+ const blob = await response.blob()
+ const filename = fileNameFromResponse(response, `${doc.title ?? 'document'}.${format}`)
+ downloadBlob(blob, filename)
+ }
+ )
+ } catch {
+ // The progress toast already surfaced the failure.
+ }
+}
+
+/** Import an edited doc's `content` field ('docx' | 'md'): convert, preview the diff, apply. */
+export async function importDocumentContent (doc: DocumentContentTarget, format: string): Promise {
+ const accept = format === 'md' ? '.md,.markdown' : '.docx'
+ const file = await pickFile(accept)
+ if (file === undefined) {
+ return
+ }
+
+ const lang = getCurrentLanguage()
+ let converted: { current: MarkupNode, candidate: MarkupNode }
+ try {
+ converted = await withProgress(
+ {
+ title: await translate(exportPlugin.string.ImportingDocumentContent, {}, lang),
+ message: await translate(exportPlugin.string.ConvertingDocumentContent, {}, lang),
+ done: await translate(exportPlugin.string.DocumentContentConverted, {}, lang),
+ failed: await translate(exportPlugin.string.DocumentContentImportFailed, {}, lang)
+ },
+ async () => {
+ const uploadFile = await getResource(attachment.helper.UploadFile)
+ const { uuid } = await uploadFile(file)
+
+ const diffResponse = await fetch(`${getExportBaseUrl()}/document-import`, {
+ method: 'POST',
+ headers: authHeaders(),
+ body: JSON.stringify({ blobId: uuid, _class: doc._class, _id: doc._id, format })
+ })
+ if (!diffResponse.ok) {
+ const message = await readErrorMessage(diffResponse)
+ throw new Error(message ?? 'Failed to convert document')
+ }
+ return (await diffResponse.json()) as { current: MarkupNode, candidate: MarkupNode }
+ }
+ )
+ } catch {
+ // The progress toast already surfaced the failure.
+ return
+ }
+
+ showPopup(
+ DocumentImportDiffPopup,
+ { current: converted.current, candidate: converted.candidate },
+ undefined,
+ (apply) => {
+ if (apply === true) {
+ void applyImportedDocumentContent(doc, converted.candidate).catch((err) => {
+ void setPlatformStatus(unknownError(err))
+ })
+ }
+ }
+ )
+}
+
+async function applyImportedDocumentContent (doc: DocumentContentTarget, markup: MarkupNode): Promise {
+ // The write goes through the collaborator (updateMarkup), NOT a raw content-blob write:
+ // the editor and collaborator serve the live Y.Doc, and a document that has ever been
+ // opened has a Y.Doc blob that takes precedence over the JSON content blob. Only
+ // updateMarkup updates that live Y.Doc, so the change actually becomes visible.
+ const token = getMetadata(presentation.metadata.Token) ?? ''
+ const collaboratorUrl = getMetadata(presentation.metadata.CollaboratorUrl) ?? ''
+ const workspace = getMetadata(presentation.metadata.WorkspaceUuid)
+ if (workspace === undefined || collaboratorUrl === '') {
+ throw new Error('Collaborator service is not configured')
+ }
+
+ const collaborator = getCollaboratorClient(workspace, token, collaboratorUrl)
+ await collaborator.updateMarkup(makeDocCollabId(doc as unknown as Doc, 'content'), jsonToMarkup(markup))
+}
+
+async function pickFile (accept: string): Promise {
+ return await new Promise((resolve) => {
+ const input = document.createElement('input')
+ input.type = 'file'
+ input.accept = accept
+ input.onchange = () => {
+ resolve(input.files?.[0])
+ }
+ input.click()
+ })
+}
diff --git a/plugins/export-resources/src/document/components/DocumentExportFormatPopup.svelte b/plugins/export-resources/src/document/components/DocumentExportFormatPopup.svelte
new file mode 100644
index 0000000000..0106dec5f9
--- /dev/null
+++ b/plugins/export-resources/src/document/components/DocumentExportFormatPopup.svelte
@@ -0,0 +1,47 @@
+
+
+
+{#await getFormats() then formats}
+ {
+ const format = evt.detail
+ if (typeof format === 'string' && doc !== undefined) {
+ void exportDocumentContent(doc, format)
+ }
+ dispatch('close')
+ }}
+ />
+{/await}
diff --git a/plugins/controlled-documents-resources/src/components/document/ImportDocxPopup.svelte b/plugins/export-resources/src/document/components/DocumentImportDiffPopup.svelte
similarity index 78%
rename from plugins/controlled-documents-resources/src/components/document/ImportDocxPopup.svelte
rename to plugins/export-resources/src/document/components/DocumentImportDiffPopup.svelte
index e518e34c94..355bc9148b 100644
--- a/plugins/controlled-documents-resources/src/components/document/ImportDocxPopup.svelte
+++ b/plugins/export-resources/src/document/components/DocumentImportDiffPopup.svelte
@@ -11,10 +11,10 @@
-->
diff --git a/plugins/export-resources/src/document/components/DocumentImportFormatPopup.svelte b/plugins/export-resources/src/document/components/DocumentImportFormatPopup.svelte
new file mode 100644
index 0000000000..1201aa269b
--- /dev/null
+++ b/plugins/export-resources/src/document/components/DocumentImportFormatPopup.svelte
@@ -0,0 +1,47 @@
+
+
+
+{#await getFormats() then formats}
+ {
+ const format = evt.detail
+ if (typeof format === 'string' && doc !== undefined) {
+ void importDocumentContent(doc, format)
+ }
+ dispatch('close')
+ }}
+ />
+{/await}
diff --git a/plugins/export-resources/src/download.ts b/plugins/export-resources/src/download.ts
index ce060c5264..3891a1d7cc 100644
--- a/plugins/export-resources/src/download.ts
+++ b/plugins/export-resources/src/download.ts
@@ -25,10 +25,14 @@ export function downloadBlob (blob: Blob, fileName: string): void {
anchor.style.display = 'none'
anchor.href = url
anchor.download = fileName
+ // Attach the anchor to the DOM before click() (detached anchors are ignored by some
+ // browsers) and defer the revoke — revoking synchronously drops the blob mid-read.
document.body.appendChild(anchor)
anchor.click()
- window.URL.revokeObjectURL(url)
- document.body.removeChild(anchor)
+ setTimeout(() => {
+ document.body.removeChild(anchor)
+ window.URL.revokeObjectURL(url)
+ }, 10000)
}
/**
diff --git a/plugins/export-resources/src/index.ts b/plugins/export-resources/src/index.ts
index a772c3d902..a71dfbdbbd 100644
--- a/plugins/export-resources/src/index.ts
+++ b/plugins/export-resources/src/index.ts
@@ -24,6 +24,8 @@ import ExportToWorkspaceModal from './components/ExportToWorkspaceModal.svelte'
import ExportResultPanel from './components/ExportResultPanel.svelte'
import ExportTableDialog from './components/ExportTableDialog.svelte'
import { exportTableAction } from './actionImpl'
+import DocumentExportFormatPopup from './document/components/DocumentExportFormatPopup.svelte'
+import DocumentImportFormatPopup from './document/components/DocumentImportFormatPopup.svelte'
export { default as ExportButton } from './components/ExportButton.svelte'
export { default as ExportSettings } from './components/ExportSettings.svelte'
@@ -34,6 +36,10 @@ export { exportTableAction } from './actionImpl'
export { downloadBlob, fileNameFromResponse } from './download'
export { buildTable, exportTable, type TableExportFormat, type TableExportScope } from './tableExport'
export * from './serializers'
+export { default as DocumentExportFormatPopup } from './document/components/DocumentExportFormatPopup.svelte'
+export { default as DocumentImportFormatPopup } from './document/components/DocumentImportFormatPopup.svelte'
+export { default as DocumentImportDiffPopup } from './document/components/DocumentImportDiffPopup.svelte'
+export { exportDocumentContent, importDocumentContent, type DocumentContentTarget } from './document/actions'
export async function getExportResultTitle (_client: Client, _ref: Ref, doc?: Doc): Promise {
const record = doc as ExportResultRecord | undefined
@@ -62,7 +68,9 @@ export default async (): Promise => ({
ExportSettings,
ExportToWorkspaceModal,
ExportResultPanel,
- ExportTableDialog
+ ExportTableDialog,
+ DocumentExportFormatPopup,
+ DocumentImportFormatPopup
},
function: {
ExportResultTitleProvider: getExportResultTitle
diff --git a/plugins/export/src/plugin.ts b/plugins/export/src/plugin.ts
index 9cf314e67c..1d181a4c84 100644
--- a/plugins/export/src/plugin.ts
+++ b/plugins/export/src/plugin.ts
@@ -45,14 +45,31 @@ export const exportPlugin = plugin(exportId, {
ExportedDocumentClass: '' as IntlString,
Import: '' as IntlString,
ImportedDocuments: '' as IntlString,
- ExportResultRecordTitle: '' as IntlString
+ ExportResultRecordTitle: '' as IntlString,
+
+ // Shared markup->docx/md content export & import (used by controlled documents, cards, ...).
+ ExportFormatWord: '' as IntlString,
+ ExportFormatMarkdown: '' as IntlString,
+ ExportDocumentContent: '' as IntlString,
+ ImportDocumentContent: '' as IntlString,
+ ExportingDocumentContent: '' as IntlString,
+ DocumentContentExported: '' as IntlString,
+ DocumentContentExportFailed: '' as IntlString,
+ ImportingDocumentContent: '' as IntlString,
+ ConvertingDocumentContent: '' as IntlString,
+ DocumentContentConverted: '' as IntlString,
+ DocumentContentImportFailed: '' as IntlString,
+ ReviewDocumentContentChanges: '' as IntlString,
+ ApplyDocumentContentChanges: '' as IntlString
},
component: {
ExportButton: '' as AnyComponent,
ExportSettings: '' as AnyComponent,
ExportToWorkspaceModal: '' as AnyComponent,
ExportResultPanel: '' as AnyComponent,
- ExportTableDialog: '' as AnyComponent
+ ExportTableDialog: '' as AnyComponent,
+ DocumentExportFormatPopup: '' as AnyComponent,
+ DocumentImportFormatPopup: '' as AnyComponent
},
actionImpl: {
ExportTable: '' as ViewAction>
diff --git a/services/github/pod-github/src/markdown/__tests__/textmodel.test.ts b/services/github/pod-github/src/markdown/__tests__/textmodel.test.ts
index 5f87b733c3..fc2597a2c0 100644
--- a/services/github/pod-github/src/markdown/__tests__/textmodel.test.ts
+++ b/services/github/pod-github/src/markdown/__tests__/textmodel.test.ts
@@ -844,7 +844,7 @@ A list of closed updated issues`
expect(msg).toEqual('* test1 \\\n *Italic*\n* test2 **BOLD**')
})
- it('check serialize throw unsupported', () => {
+ it('check serialize skips unsupported node types', () => {
const node: MarkupNode = {
content: [
{
@@ -869,9 +869,10 @@ A list of closed updated issues`
],
type: MarkupNodeType.doc
}
- expect(() => serializeMessage(node, 'ref://', 'http://')).toThrowError(
- 'Token type `textqwe` not supported by Markdown renderer'
- )
+ // Unknown node types no longer abort the whole export (see "Fix MD export"),
+ // they are dropped and rendering continues with the rest of the document.
+ expect(() => serializeMessage(node, 'ref://', 'http://')).not.toThrow()
+ expect(serializeMessage(node, 'ref://', 'http://')).toEqual('* test1 ')
})
it('check markdown state', () => {