From 70ae93563e8267571cfed743e884730e7f237ec7 Mon Sep 17 00:00:00 2001 From: Denis Nikiforov Date: Mon, 13 May 2024 13:55:53 +0500 Subject: [PATCH] [3464] Improve i18n support for domain and view forms Bug: https://github.com/eclipse-sirius/sirius-web/issues/3464 Signed-off-by: Denis Nikiforov --- CHANGELOG.adoc | 1 + .../cypress/e2e/project/deck/deck.cy.ts | 2 +- .../cypress/e2e/project/details/form.cy.ts | 90 ++--- .../e2e/project/diagrams/collapse.cy.ts | 12 +- .../e2e/project/diagrams/custom-shape.cy.ts | 6 +- .../diagrams/diagram-contextual-palette.cy.js | 13 +- .../e2e/project/diagrams/diagram-label.cy.ts | 22 +- .../project/diagrams/direct-edit-label.cy.ts | 22 +- .../cypress/e2e/project/diagrams/edges.cy.ts | 18 +- .../e2e/project/diagrams/graphical-dnd.cy.ts | 16 +- .../e2e/project/diagrams/group-palette.cy.ts | 16 +- .../e2e/project/diagrams/list-node.cy.ts | 6 +- .../project/diagrams/node-aspect-ratio.cy.ts | 20 +- .../explorer/document-context-menu.cy.js | 2 +- .../explorer/object-context-menu.cy.js | 10 +- .../formdescriptioneditor.cy.js | 88 ++-- .../e2e/project/forms/widget-reference.cy.ts | 52 +-- .../e2e/project/studio/color-palette.cy.js | 20 +- .../cypress/e2e/project/studio/studio.cy.ts | 108 +++-- integration-tests/cypress/workbench/Deck.ts | 6 +- ...pring-collaborative-diagrams_ru.properties | 24 ++ .../src/main/resources/plugin_ru.properties | 49 +++ .../emf/forms/EEnumIfDescriptionProvider.java | 8 +- .../emf/forms/EEnumLiteralLabelProvider.java | 66 +++ .../emf/forms/EMFFormDescriptionProvider.java | 2 +- .../emf/services/DefaultEditService.java | 40 +- .../emf/services/DefaultLabelService.java | 6 + .../services/messages/EMFMessageService.java | 22 +- .../services/messages/IEMFMessageService.java | 30 +- .../messages/sirius-web-emf.properties | 6 +- .../messages/sirius-web-emf_ru.properties | 20 + .../forms/tests/navigation/FormNavigator.java | 4 + .../DomainPropertiesConfigurer.java | 48 ++- .../MultipleDomainPropertiesConfigurer.java | 24 +- .../DomainPropertiesMessageService.java | 41 ++ .../services/DomainAttributeServices.java | 11 +- ...-web-sample-application-domain.properties} | 17 +- ...eb-sample-application-domain_ru.properties | 24 ++ ...DescriptionEditorPageIntegrationTests.java | 2 +- .../messages/IServicesMessageService.java | 12 + .../messages/ServicesMessageService.java | 30 ++ .../relatedelements/CurrentTreeProvider.java | 20 +- ...ultRelatedElementsDescriptionProvider.java | 12 +- .../relatedelements/IncomingTreeProvider.java | 10 +- .../relatedelements/OutgoingTreeProvider.java | 10 +- .../RepresentationsDescriptionProvider.java | 12 +- .../RepresentationsMetadataProvider.java | 12 +- .../messages/sirius-web-services.properties | 8 +- .../sirius-web-services_ru.properties | 24 ++ .../projects/NoOpServicesMessageService.java | 30 ++ .../CustomNodeDetailsViewControllerTests.java | 17 +- ...ectCreationControllerIntegrationTests.java | 4 +- .../src/main/resources/plugin_ru.properties | 71 ++++ .../src/main/resources/plugin_ru.properties | 27 ++ .../src/main/resources/plugin_ru.properties | 216 ++++++++++ .../src/main/resources/plugin_ru.properties | 75 ++++ .../sirius-components-view-emf/pom.xml | 379 +++++++++--------- .../emf/FixedColorPropertiesConfigurer.java | 15 +- ...opertiesDescriptionRegistryConfigurer.java | 2 +- .../PropertiesWidgetCreationService.java | 9 +- .../EdgeStylePropertiesConfigurer.java | 39 +- .../NodeStylePropertiesConfigurer.java | 47 ++- .../src/main/resources/plugin_ru.properties | 257 ++++++++++++ .../src/main/resources/plugin_ru.properties | 66 +++ .../src/main/resources/plugin_ru.properties | 35 ++ 65 files changed, 1833 insertions(+), 580 deletions(-) create mode 100644 packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/resources/messages/sirius-web-spring-collaborative-diagrams_ru.properties create mode 100644 packages/domain/backend/sirius-components-domain-edit/src/main/resources/plugin_ru.properties create mode 100644 packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EEnumLiteralLabelProvider.java create mode 100644 packages/emf/backend/sirius-components-emf/src/main/resources/messages/sirius-web-emf_ru.properties create mode 100644 packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/messages/DomainPropertiesMessageService.java rename packages/{view/backend/sirius-components-view-emf/src/main/resources/messages/sirius-web-emf.properties => sirius-web/backend/sirius-web-sample-application/src/main/resources/messages/sirius-web-sample-application-domain.properties} (64%) create mode 100644 packages/sirius-web/backend/sirius-web-sample-application/src/main/resources/messages/sirius-web-sample-application-domain_ru.properties create mode 100644 packages/sirius-web/backend/sirius-web-services/src/main/resources/messages/sirius-web-services_ru.properties create mode 100644 packages/view/backend/sirius-components-view-deck-edit/src/main/resources/plugin_ru.properties create mode 100644 packages/view/backend/sirius-components-view-diagram-customnodes-edit/src/main/resources/plugin_ru.properties create mode 100644 packages/view/backend/sirius-components-view-diagram-edit/src/main/resources/plugin_ru.properties create mode 100644 packages/view/backend/sirius-components-view-edit/src/main/resources/plugin_ru.properties create mode 100644 packages/view/backend/sirius-components-view-form-edit/src/main/resources/plugin_ru.properties create mode 100644 packages/view/backend/sirius-components-view-gantt-edit/src/main/resources/plugin_ru.properties create mode 100644 packages/view/backend/sirius-components-widget-reference-view-edit/src/main/resources/plugin_ru.properties diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index c9e9f36d16c..632400ac3af 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -120,6 +120,7 @@ image:doc/screenshots/insideLabelPositions.png[Inside label positions, 70%] - https://github.com/eclipse-sirius/sirius-web/issues/3645[#3645] [core] Revert earlier change made in #3595 which caused regressions - https://github.com/eclipse-sirius/sirius-web/issues/3651[#3651] [diagram] Improve performances when interacting with the diagram, especially when dragging a node - https://github.com/eclipse-sirius/sirius-web/issues/3641[#3641] [core] Do not fetch representation content when we only need the metadata +- https://github.com/eclipse-sirius/sirius-web/issues/3464[#3464] [view] Improve i18n support for domain and view forms == v2024.5.0 diff --git a/integration-tests/cypress/e2e/project/deck/deck.cy.ts b/integration-tests/cypress/e2e/project/deck/deck.cy.ts index bddc61ecd11..e696798bae4 100644 --- a/integration-tests/cypress/e2e/project/deck/deck.cy.ts +++ b/integration-tests/cypress/e2e/project/deck/deck.cy.ts @@ -115,7 +115,7 @@ describe('Verify the Deck Representation', () => { }); it('We create a new daily tag to verify that the deck is properly refreshed', () => { const explorer = new Explorer(); - explorer.createObject('Daily Project Dev', 'Tag'); + explorer.createObject('Daily Project Dev', 'ownedTags-TaskTag'); explorer.select('::'); const details = new Details(); details.getTextField('Prefix').type('daily{enter}'); diff --git a/integration-tests/cypress/e2e/project/details/form.cy.ts b/integration-tests/cypress/e2e/project/details/form.cy.ts index 002537e909c..4efc1d47fc1 100644 --- a/integration-tests/cypress/e2e/project/details/form.cy.ts +++ b/integration-tests/cypress/e2e/project/details/form.cy.ts @@ -11,47 +11,47 @@ * Obeo - initial API and implementation *******************************************************************************/ -import { Project } from "../../../pages/Project"; -import { Flow } from "../../../usecases/Flow"; -import { Studio } from "../../../usecases/Studio"; -import { Details } from "../../../workbench/Details"; -import { Explorer } from "../../../workbench/Explorer"; +import { Project } from '../../../pages/Project'; +import { Flow } from '../../../usecases/Flow'; +import { Studio } from '../../../usecases/Studio'; +import { Details } from '../../../workbench/Details'; +import { Explorer } from '../../../workbench/Explorer'; describe('/projects/:projectId/edit - Form', () => { context('Given a Form Description', () => { let studioProjectId: string = ''; before(() => - new Studio().createBlankStudioProjectWithView().then((createdProjectData) => { - studioProjectId = createdProjectData.projectId; - new Project().visit(createdProjectData.projectId); - const explorer = new Explorer(); - explorer.expand('ViewDocument'); - explorer.expand('View'); - explorer.createObject('View', 'Form Description'); - explorer.select('New Form Description'); - const details = new Details(); - details.getTextField('Domain Type').type('flow::System'); - details.getTextField('Name').type('{selectall}').type('ReadOnlyRepresentation'); - details.getTextField('Title Expression').type('{selectall}').type('ReadOnlyRepresentation'); - explorer.expand('ReadOnlyRepresentation'); - explorer.expand('PageDescription'); - explorer.select('GroupDescription') - details.getTextField('Name').type('Group ReadOnly{enter}'); - explorer.createObject('Group ReadOnly', 'Widgets Button Description'); - details.getTextField('Button Label Expression').type('Test Button'); - details.getTextField('Is Enabled Expression').type('aql:self.temperature==0'); - explorer.createObject('Group ReadOnly', 'Widgets Flexbox Container Description'); - details.getTextField('Name').invoke('text').should('eq', ''); - details.getTextField('Name').type('Flexbox Container'); - details.getTextField('Label Expression').type('Test flexbox container'); - details.getTextField('Is Enabled Expression').type("aql:self.name='NewSystem'"); + new Studio().createBlankStudioProjectWithView().then((createdProjectData) => { + studioProjectId = createdProjectData.projectId; + new Project().visit(createdProjectData.projectId); + const explorer = new Explorer(); + explorer.expand('ViewDocument'); + explorer.expand('View'); + explorer.createObject('View', 'descriptions-FormDescription'); + explorer.select('New Form Description'); + const details = new Details(); + details.getTextField('Domain Type').type('flow::System'); + details.getTextField('Name').type('{selectall}').type('ReadOnlyRepresentation'); + details.getTextField('Title Expression').type('{selectall}').type('ReadOnlyRepresentation'); + explorer.expand('ReadOnlyRepresentation'); + explorer.expand('Page Description'); + explorer.select('Group Description'); + details.getTextField('Name').type('Group ReadOnly{enter}'); + explorer.createObject('Group ReadOnly', 'children-ButtonDescription'); + details.getTextField('Button Label Expression').type('Test Button'); + details.getTextField('Is Enabled Expression').type('aql:self.temperature==0'); + explorer.createObject('Group ReadOnly', 'children-FlexboxContainerDescription'); + details.getTextField('Name').invoke('text').should('eq', ''); + details.getTextField('Name').type('Flexbox Container'); + details.getTextField('Label Expression').type('Test flexbox container'); + details.getTextField('Is Enabled Expression').type("aql:self.name='NewSystem'"); - explorer.createObject('Flexbox Container', 'Textfield Description'); - details.getTextField('Name').invoke('text').should('eq', ''); - details.getTextField('Label Expression').type('Name'); - details.getTextField('Value Expression').type('aql:self.name'); - }) + explorer.createObject('Flexbox Container', 'children-TextfieldDescription'); + details.getTextField('Name').invoke('text').should('eq', ''); + details.getTextField('Label Expression').type('Name'); + details.getTextField('Value Expression').type('aql:self.name'); + }) ); after(() => cy.deleteProject(studioProjectId)); @@ -68,16 +68,16 @@ describe('/projects/:projectId/edit - Form', () => { afterEach(() => cy.deleteProject(flowProjectId)); it('check widget read-only mode in form', () => { - const explorer = new Explorer(); - explorer.expand('FlowNewModel'); - explorer.createRepresentation('NewSystem', 'ReadOnlyRepresentation', 'ReadOnlyRepresentation'); - cy.getByTestId('Test Button').should('exist').should('not.be.disabled'); - explorer.select('NewSystem'); - const details = new Details(); - details.getTextField('Temperature').type('{selectall}2{enter}'); - cy.getByTestId('Test Button').should('be.disabled'); - details.getTextField('Temperature').type('{selectall}0{enter}'); - cy.getByTestId('Test Button').should('not.be.disabled'); + const explorer = new Explorer(); + explorer.expand('FlowNewModel'); + explorer.createRepresentation('NewSystem', 'ReadOnlyRepresentation', 'ReadOnlyRepresentation'); + cy.getByTestId('Test Button').should('exist').should('not.be.disabled'); + explorer.select('NewSystem'); + const details = new Details(); + details.getTextField('Temperature').type('{selectall}2{enter}'); + cy.getByTestId('Test Button').should('be.disabled'); + details.getTextField('Temperature').type('{selectall}0{enter}'); + cy.getByTestId('Test Button').should('not.be.disabled'); }); it('check the flexbox read-only mode is dispatched to children', () => { @@ -90,7 +90,5 @@ describe('/projects/:projectId/edit - Form', () => { cy.getByTestId('page').findByTestId('input-Name').should('be.disabled'); }); }); - - }); }); diff --git a/integration-tests/cypress/e2e/project/diagrams/collapse.cy.ts b/integration-tests/cypress/e2e/project/diagrams/collapse.cy.ts index 1950f3e9259..06f0b7772fd 100644 --- a/integration-tests/cypress/e2e/project/diagrams/collapse.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/collapse.cy.ts @@ -40,7 +40,7 @@ describe('Diagram - collapsible node', () => { cy.get('[title="domain::Domain"]').then(($div) => { domainName = $div.data().testid; explorer.expand(domainName); - explorer.createObject('Entity1', 'Relation'); + explorer.createObject('Entity1', 'relations-Relation'); details.getCheckBox('Containment').check(); details.openReferenceWidgetOptions('Target Type'); details.selectReferenceWidgetOption('Entity2'); @@ -53,7 +53,7 @@ describe('Diagram - collapsible node', () => { details.selectReferenceWidgetOption('Entity2 Node'); explorer.expand('Entity1 Node'); explorer.expand('aql:self.name'); - explorer.select('InsideLabelStyle'); + explorer.select('Inside Label Style 14'); details.getCheckBox('With Header').check(); details.getCheckBox('Display Header Separator').check(); }); @@ -75,11 +75,15 @@ describe('Diagram - collapsible node', () => { afterEach(() => cy.deleteProject(instanceProjectId)); it('Then a collapsed node does not display its header line', () => { + cy.on('uncaught:exception', (err) => + err.message.includes('ResizeObserver loop limit exceeded') ? false : undefined + ); + const explorer = new Explorer(); const diagram = new Diagram(); const details = new Details(); - explorer.createObject('Root', 'Entity1s Entity1'); - explorer.createObject('Entity1', 'Relation Entity2'); + explorer.createObject('Root', 'entity1s-Entity1'); + explorer.createObject('Entity1', 'relation-Entity2'); explorer.select('Entity1'); details.getTextField('Name').type('Entity1{enter}'); explorer.createRepresentation('Root', `${domainName} Diagram Description`, 'diagram'); diff --git a/integration-tests/cypress/e2e/project/diagrams/custom-shape.cy.ts b/integration-tests/cypress/e2e/project/diagrams/custom-shape.cy.ts index e5542ede14d..c604529ffdb 100644 --- a/integration-tests/cypress/e2e/project/diagrams/custom-shape.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/custom-shape.cy.ts @@ -29,14 +29,14 @@ describe('/projects/:projectId/edit - Custom Shape', () => { cy.get('[data-testid$=" Diagram Description"]').dblclick(); cy.getByTestId('Entity1 Node').dblclick(); - cy.getByTestId('RectangularNodeStyleDescription-more').click(); + cy.getByTestId('Rectangular Node Style Description 3-more').click(); cy.getByTestId('delete').click(); cy.getByTestId('Entity1 Node-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); cy.getByTestId('childCreationDescription') - .get('[data-value="Ellipse Node Style Description"]') + .get('[data-value="style-EllipseNodeStyleDescription"]') .should('exist') .click(); cy.getByTestId('create-object').click(); @@ -73,7 +73,7 @@ describe('/projects/:projectId/edit - Custom Shape', () => { cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Entity1s Entity1"]').should('exist').click(); + cy.getByTestId('childCreationDescription').get('[data-value="entity1s-Entity1"]').should('exist').click(); cy.getByTestId('create-object').click(); cy.getByTestId('Ellipse - ').should('have.css', 'border-radius', '50%'); diff --git a/integration-tests/cypress/e2e/project/diagrams/diagram-contextual-palette.cy.js b/integration-tests/cypress/e2e/project/diagrams/diagram-contextual-palette.cy.js index f268880cf44..ea1ae8d2fb3 100644 --- a/integration-tests/cypress/e2e/project/diagrams/diagram-contextual-palette.cy.js +++ b/integration-tests/cypress/e2e/project/diagrams/diagram-contextual-palette.cy.js @@ -106,22 +106,22 @@ describe('/projects/:projectId/edit - Robot Diagram', () => { cy.getByTestId('treeitem-contextmenu').findByTestId('rename-tree-item').click(); cy.getByTestId('name-edit').type('Diagram Description{enter}'); - cy.createChildObject('DiagramPalette', 'Diagram Tool Section'); + cy.createChildObject('Palette', 'toolSections-DiagramToolSection'); cy.getByTestId('Tool Section').click(); cy.getByTestId('Name').type('{selectAll}section1'); - cy.createChildObject('DiagramPalette', 'Diagram Tool Section'); + cy.createChildObject('Palette', 'toolSections-DiagramToolSection'); cy.getByTestId('Tool Section').click(); cy.getByTestId('Name').type('{selectAll}section2'); - cy.createChildObject('section1', 'Node Tool'); + cy.createChildObject('section1', 'nodeTools-NodeTool'); cy.getByTestId('Tool').click(); cy.getByTestId('Name').type('{selectAll}tool1_section1'); - cy.createChildObject('section1', 'Node Tool'); + cy.createChildObject('section1', 'nodeTools-NodeTool'); cy.getByTestId('Tool').click(); cy.getByTestId('Name').type('{selectAll}tool2_section1'); - cy.createChildObject('section2', 'Node Tool'); + cy.createChildObject('section2', 'nodeTools-NodeTool'); cy.getByTestId('Tool').click(); cy.getByTestId('Name').type('{selectAll}tool1_section2'); - cy.createChildObject('section2', 'Node Tool'); + cy.createChildObject('section2', 'nodeTools-NodeTool'); cy.getByTestId('Tool').click(); cy.getByTestId('Name').type('{selectAll}tool2_section2'); @@ -270,7 +270,6 @@ describe('/projects/:projectId/edit - Robot Diagram', () => { cy.getByTestId('confirmation-dialog').should('not.exist'); }); - it('diagram palette is closed once element palette is opened', () => { createFlowReactFlowDiagram(); diff --git a/integration-tests/cypress/e2e/project/diagrams/diagram-label.cy.ts b/integration-tests/cypress/e2e/project/diagrams/diagram-label.cy.ts index 5877e73d390..bc97bc68339 100644 --- a/integration-tests/cypress/e2e/project/diagrams/diagram-label.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/diagram-label.cy.ts @@ -45,18 +45,18 @@ describe('Diagram - inside outside labels', () => { explorer.expand('Entity1 Node'); explorer.select('aql:self.name'); details.getTextField('Label Expression').type('{selectAll}InsideLabelNode1{enter}'); - explorer.createObject('Entity1 Node', 'Outside Label Description'); + explorer.createObject('Entity1 Node', 'outsideLabels-OutsideLabelDescription'); explorer.select('aql:self.name'); details.getTextField('Label Expression').type('{selectAll}OutsideLabelNode1{enter}'); explorer.collapse('Entity1 Node'); explorer.expand('Entity2 Node'); explorer.select('aql:self.name'); details.getTextField('Label Expression').type('{selectAll}InsideLabelNode2{enter}'); - explorer.createObject('Entity2 Node', 'Outside Label Description'); + explorer.createObject('Entity2 Node', 'outsideLabels-OutsideLabelDescription'); explorer.select('aql:self.name'); details.getTextField('Label Expression').type('{selectAll}OutsideLabelNode2{enter}'); - explorer.delete('RectangularNodeStyleDescription'); - explorer.createObject('Entity2 Node', 'Style Image'); + explorer.delete('Rectangular Node Style Description 3'); + explorer.createObject('Entity2 Node', 'style-ImageNodeStyleDescription'); details.selectValue('Shape', 'camera'); }); } @@ -81,8 +81,8 @@ describe('Diagram - inside outside labels', () => { it('Then inside and outside label are display for both nodes', () => { const explorer = new Explorer(); const diagram = new Diagram(); - explorer.createObject('Root', 'Entity1s Entity1'); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity1s-Entity1'); + explorer.createObject('Root', 'entity2s-Entity2'); diagram.getNodes('diagram', 'InsideLabelNode1').findByTestId('Label - InsideLabelNode1').should('exist'); diagram.getNodes('diagram', 'InsideLabelNode1').findByTestId('Label - OutsideLabelNode1').should('exist'); @@ -140,7 +140,7 @@ describe('Diagram - inside outside labels', () => { const explorer = new Explorer(); const diagram = new Diagram(); const details = new Details(); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); details.getTextField('Name').type('small{enter}'); diagram.fitToScreen(); let initialWidth: number; @@ -218,7 +218,7 @@ describe('Diagram - inside outside labels', () => { const explorer = new Explorer(); const diagram = new Diagram(); const details = new Details(); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); details.getTextField('Name').type('small{enter}'); diagram.fitToScreen(); let initialWidth: number; @@ -298,7 +298,7 @@ describe('Diagram - inside outside labels', () => { const explorer = new Explorer(); const diagram = new Diagram(); const details = new Details(); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); details.getTextField('Name').type('small{enter}'); diagram.fitToScreen(); let initialWidth: number; @@ -348,7 +348,7 @@ describe('Diagram - inside outside labels', () => { explorer.expand(`${domainName} Diagram Description`); explorer.expand('Entity1 Node'); explorer.delete('aql:self.name'); - explorer.createObject('Entity1 Node', 'Outside Label Description'); + explorer.createObject('Entity1 Node', 'outsideLabels-OutsideLabelDescription'); }); } }); @@ -373,7 +373,7 @@ describe('Diagram - inside outside labels', () => { const explorer = new Explorer(); const diagram = new Diagram(); const details = new Details(); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); details.getTextField('Name').type('small{enter}'); diagram.fitToScreen(); let initialWidth: number; diff --git a/integration-tests/cypress/e2e/project/diagrams/direct-edit-label.cy.ts b/integration-tests/cypress/e2e/project/diagrams/direct-edit-label.cy.ts index 25a531bab04..8784590c4ad 100644 --- a/integration-tests/cypress/e2e/project/diagrams/direct-edit-label.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/direct-edit-label.cy.ts @@ -42,7 +42,7 @@ describe('Diagram - Direct edit label', () => { explorer.expand('View'); explorer.expand(`${domainName} Diagram Description`); explorer.expand('Entity1 Node'); - explorer.expand('NodePalette'); + explorer.expand('Node Palette'); explorer.delete('Edit Label'); explorer.select('LinkedTo Edge'); new Details().getTextField('Center Label Expression').type('Edge center{enter}'); @@ -69,7 +69,7 @@ describe('Diagram - Direct edit label', () => { it('Then we cannot perform the direct edition of the node without the direct edit tool', () => { const explorer = new Explorer(); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); explorer.getTreeItemByLabel('Entity1').click(); const details = new Details(); @@ -87,7 +87,7 @@ describe('Diagram - Direct edit label', () => { it('Then we can perform the edition of the label of the node with the direct edit tool', () => { const explorer = new Explorer(); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity2s-Entity2'); explorer.getTreeItemByLabel('Entity2').click(); const details = new Details(); @@ -105,7 +105,7 @@ describe('Diagram - Direct edit label', () => { it('Then during edit triggering escape cancelled the current edition', () => { const explorer = new Explorer(); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity2s-Entity2'); explorer.getTreeItemByLabel('Entity2').click(); const details = new Details(); @@ -124,7 +124,7 @@ describe('Diagram - Direct edit label', () => { it('Then we can set the correct name when typing directly', () => { const explorer = new Explorer(); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity2s-Entity2'); const details = new Details(); details.getTextField('Name').type('Entity2{Enter}'); @@ -135,8 +135,8 @@ describe('Diagram - Direct edit label', () => { it('Then we can use direct edit on edge', () => { const explorer = new Explorer(); - explorer.createObject('Root', 'Entity1s Entity1'); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity1s-Entity1'); + explorer.createObject('Root', 'entity2s-Entity2'); explorer.select('Entity2'); const details = new Details(); details.getTextField('Name').type('Entity2'); @@ -155,7 +155,7 @@ describe('Diagram - Direct edit label', () => { it('Then during the direct edition, the palette is hidden', () => { const explorer = new Explorer(); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity2s-Entity2'); explorer.getTreeItemByLabel('Entity2').click(); const details = new Details(); @@ -198,7 +198,7 @@ describe('Diagram - Direct edit label', () => { explorer.select('LinkedTo Edge'); new Details().getTextField('Center Label Expression').type('Edge center{enter}'); explorer.expand('LinkedTo Edge'); - explorer.expand('EdgePalette'); + explorer.expand('Edge Palette'); explorer.delete('Edit Label'); }); } @@ -223,8 +223,8 @@ describe('Diagram - Direct edit label', () => { it('Then we can not use direct edit on edge', () => { const explorer = new Explorer(); - explorer.createObject('Root', 'Entity1s Entity1'); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity1s-Entity1'); + explorer.createObject('Root', 'entity2s-Entity2'); explorer.select('Entity2'); const details = new Details(); details.getTextField('Name').type('Entity2'); diff --git a/integration-tests/cypress/e2e/project/diagrams/edges.cy.ts b/integration-tests/cypress/e2e/project/diagrams/edges.cy.ts index 14afff8bc71..5a7bcae2ca7 100644 --- a/integration-tests/cypress/e2e/project/diagrams/edges.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/edges.cy.ts @@ -12,9 +12,9 @@ *******************************************************************************/ import { Project } from '../../../pages/Project'; import { Studio } from '../../../usecases/Studio'; -import { Explorer } from '../../../workbench/Explorer'; import { Details } from '../../../workbench/Details'; import { Diagram } from '../../../workbench/Diagram'; +import { Explorer } from '../../../workbench/Explorer'; describe('Diagram - edges', () => { context('Given a studio template', () => { @@ -30,7 +30,7 @@ describe('Diagram - edges', () => { cy.get('[title="domain::Domain"]').then(($div) => { domainName = $div.data().testid; explorer.expand(`${domainName}`); - explorer.createObject('Entity1', 'Relation'); + explorer.createObject('Entity1', 'relations-Relation'); const details = new Details(); details.getCheckBox('Containment').check(); details.openReferenceWidgetOptions('Target Type'); @@ -67,9 +67,9 @@ describe('Diagram - edges', () => { const details = new Details(); const diagram = new Diagram(); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); details.getTextField('Name').type('Entity1{Enter}'); - explorer.createObject('Entity1', 'Relation Entity2'); + explorer.createObject('Entity1', 'relation-Entity2'); details.getTextField('Name').should('have.value', ''); details.getTextField('Name').type('Entity2{Enter}'); @@ -110,8 +110,8 @@ describe('Diagram - edges', () => { explorer.expand('Entity1 Node'); details.getTextField('Default Width Expression').type('300{enter}'); details.getTextField('Default Height Expression').type('50{enter}'); - explorer.delete('RectangularNodeStyleDescription'); - explorer.createObject('Entity1 Node', 'Ellipse Node Style Description'); + explorer.delete('Rectangular Node Style Description 3'); + explorer.createObject('Entity1 Node', 'style-EllipseNodeStyleDescription'); }); }) ); @@ -135,12 +135,12 @@ describe('Diagram - edges', () => { const details = new Details(); const diagram = new Diagram(); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); details.getTextField('Name').type('Entity1{Enter}'); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity2s-Entity2'); details.getTextField('Name').should('have.value', ''); details.getTextField('Name').type('Entity2{Enter}'); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity2s-Entity2'); details.getTextField('Name').should('have.value', ''); details.getTextField('Name').type('Entity2.bis{Enter}'); explorer.select('Entity1'); diff --git a/integration-tests/cypress/e2e/project/diagrams/graphical-dnd.cy.ts b/integration-tests/cypress/e2e/project/diagrams/graphical-dnd.cy.ts index 785323c4e08..da44d7635c4 100644 --- a/integration-tests/cypress/e2e/project/diagrams/graphical-dnd.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/graphical-dnd.cy.ts @@ -12,9 +12,9 @@ *******************************************************************************/ import { Project } from '../../../pages/Project'; import { Studio } from '../../../usecases/Studio'; -import { Explorer } from '../../../workbench/Explorer'; import { Details } from '../../../workbench/Details'; import { Diagram } from '../../../workbench/Diagram'; +import { Explorer } from '../../../workbench/Explorer'; describe('Diagram - Graphical-dnd', () => { context('Given a studio template', () => { @@ -42,7 +42,7 @@ describe('Diagram - Graphical-dnd', () => { it.skip('Check graphical Drag and Drop', () => { const explorer = new Explorer(); - explorer.createObject('Entity2', 'Relation'); + explorer.createObject('Entity2', 'relations-Relation'); const details = new Details(); details.getCheckBox('Containment').check(); details.openReferenceWidgetOptions('Target Type'); @@ -54,14 +54,14 @@ describe('Diagram - Graphical-dnd', () => { explorer.expand('Entity2 Node'); details.openReferenceWidgetOptions('Reused Child Node Descriptions'); details.selectReferenceWidgetOption('Entity1 Node'); - explorer.createObject('NodePalette', 'Drop Node Tool'); + explorer.createObject('NodePalette', 'dropNodeTool-DropNodeTool'); explorer.select('Tool'); details.getTextField('Name').type('{selectAll}Drop Entity1 Tool{Enter}'); details.openReferenceWidgetOptions('Accepted Node Types'); details.selectReferenceWidgetOption('Entity1 Node'); - explorer.createObject('Drop Entity1 Tool', 'Change Context'); + explorer.createObject('Drop Entity1 Tool', 'body-ChangeContext'); details.getTextField('Expression').type('{selectAll}aql:targetElement{enter}'); - explorer.createObject('aql:targetElement', 'Set Value'); + explorer.createObject('aql:targetElement', 'children-SetValue'); details.getTextField('Feature Name').type('relation{Enter}'); details.getTextField('Value Expression').type('aql:droppedElement{Enter}'); @@ -71,16 +71,16 @@ describe('Diagram - Graphical-dnd', () => { new Explorer().createRepresentation('Root', `${domainName} Diagram Description`, 'diagram'); }); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); details.getTextField('Name').type('Entity1{Enter}'); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity2s-Entity2'); details.getTextField('Name').type('Entity2{Enter}'); const diagram = new Diagram(); diagram.dragAndDropNode('Rectangle - Entity1', 'Rectangle - Entity2'); diagram.isNodeInside('Rectangle - Entity1', 'Rectangle - Entity2'); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); details.getTextField('Name').type('InvalidTarget{Enter}'); diagram.dragAndDropNode('Rectangle - Entity1', 'Rectangle - InvalidTarget'); diff --git a/integration-tests/cypress/e2e/project/diagrams/group-palette.cy.ts b/integration-tests/cypress/e2e/project/diagrams/group-palette.cy.ts index 6e722666aac..d4ddecb8471 100644 --- a/integration-tests/cypress/e2e/project/diagrams/group-palette.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/group-palette.cy.ts @@ -11,11 +11,11 @@ * Obeo - initial API and implementation *******************************************************************************/ import { Project } from '../../../pages/Project'; -import { Explorer } from '../../../workbench/Explorer'; -import { Diagram } from '../../../workbench/Diagram'; import { Flow } from '../../../usecases/Flow'; import { Papaya } from '../../../usecases/Papaya'; import { Details } from '../../../workbench/Details'; +import { Diagram } from '../../../workbench/Diagram'; +import { Explorer } from '../../../workbench/Explorer'; const projectName = 'Cypress - group palette'; describe('Diagram - group palette', () => { @@ -143,22 +143,22 @@ describe('Diagram - group palette', () => { const explorer = new Explorer(); const details = new Details(); const diagram = new Diagram(); - explorer.createObject('Root', 'Components Component'); + explorer.createObject('Root', 'components-Component'); details.getTextField('Name').invoke('text').should('eq', ''); details.getTextField('Name').type('component{enter}'); - explorer.createObject('component', 'Packages Package'); + explorer.createObject('component', 'packages-Package'); details.getTextField('Name').invoke('text').should('eq', ''); details.getTextField('Name').type('package{enter}'); - explorer.createObject('component', 'Packages Package'); + explorer.createObject('component', 'packages-Package'); details.getTextField('Name').invoke('text').should('eq', ''); details.getTextField('Name').type('package_bis{enter}'); - explorer.createObject('package', 'Types Class'); + explorer.createObject('package', 'types-Class'); details.getTextField('Name').invoke('text').should('eq', ''); details.getTextField('Name').type('class{enter}'); - explorer.createObject('class', 'Attributes Attribute'); + explorer.createObject('class', 'attributes-Attribute'); details.getTextField('Name').invoke('text').should('eq', ''); details.getTextField('Name').type('attribute{enter}'); - explorer.createObject('class', 'Operations Operation'); + explorer.createObject('class', 'operations-Operation'); details.getTextField('Name').invoke('text').should('eq', ''); details.getTextField('Name').type('operation{enter}'); explorer.createRepresentation('Root', 'Diagram', 'diagram'); diff --git a/integration-tests/cypress/e2e/project/diagrams/list-node.cy.ts b/integration-tests/cypress/e2e/project/diagrams/list-node.cy.ts index b6d5f29dcb6..1a2ef394c9d 100644 --- a/integration-tests/cypress/e2e/project/diagrams/list-node.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/list-node.cy.ts @@ -11,10 +11,10 @@ * Obeo - initial API and implementation *******************************************************************************/ -import { Studio } from '../../../usecases/Studio'; import { Project } from '../../../pages/Project'; -import { Explorer } from '../../../workbench/Explorer'; +import { Studio } from '../../../usecases/Studio'; import { Details } from '../../../workbench/Details'; +import { Explorer } from '../../../workbench/Explorer'; describe('List-node', () => { context('Given a studio template with a list node strategy', () => { @@ -35,7 +35,7 @@ describe('List-node', () => { explorer.expand(`${domainName} Diagram Description`); }); explorer.expand('Entity1 Node'); - explorer.createObject('Entity1 Node', 'Layout List'); + explorer.createObject('Entity1 Node', 'childrenLayoutStrategy-ListLayoutStrategyDescription'); }) ); diff --git a/integration-tests/cypress/e2e/project/diagrams/node-aspect-ratio.cy.ts b/integration-tests/cypress/e2e/project/diagrams/node-aspect-ratio.cy.ts index ac55fcc2bf6..69f74b27c4c 100644 --- a/integration-tests/cypress/e2e/project/diagrams/node-aspect-ratio.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/node-aspect-ratio.cy.ts @@ -10,11 +10,11 @@ * Contributors: * Obeo - initial API and implementation *******************************************************************************/ -import { Studio } from '../../../usecases/Studio'; import { Project } from '../../../pages/Project'; -import { Explorer } from '../../../workbench/Explorer'; +import { Studio } from '../../../usecases/Studio'; import { Details } from '../../../workbench/Details'; import { Diagram } from '../../../workbench/Diagram'; +import { Explorer } from '../../../workbench/Explorer'; describe('Diagram - Node aspect ratio', () => { context('Given a studio template', () => { @@ -56,7 +56,7 @@ describe('Diagram - Node aspect ratio', () => { instanceProjectId = res.projectId; }); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); explorer.select('Entity1'); details.getTextField('Name').type('Node{enter}'); @@ -89,10 +89,10 @@ describe('Diagram - Node aspect ratio', () => { const explorer = new Explorer(); const details = new Details(); - explorer.createObject(domainName, 'Entity'); + explorer.createObject(domainName, 'types-Entity'); details.getTextField('Name').should('have.value', 'NewEntity'); details.getTextField('Name').clear().type('SubNode{enter}'); - explorer.createObject('Entity1', 'Relation'); + explorer.createObject('Entity1', 'relations-Relation'); details.getCheckBox('Containment').check(); details.openReferenceWidgetOptions('Target Type'); details.selectReferenceWidgetOption('SubNode'); @@ -101,7 +101,7 @@ describe('Diagram - Node aspect ratio', () => { explorer.expand('View'); explorer.expand(`${domainName} Diagram Description`); - explorer.createObject(`${domainName} Diagram Description`, 'Node Description'); + explorer.createObject(`${domainName} Diagram Description`, 'nodeDescriptions-NodeDescription'); details.getTextField('Domain Type').should('have.value', ''); details.getTextField('Domain Type').type(`${domainName}::SubNode`); @@ -128,11 +128,11 @@ describe('Diagram - Node aspect ratio', () => { instanceProjectId = res.projectId; }); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); explorer.select('Entity1'); details.getTextField('Name').type('Node{enter}'); - explorer.createObject('Node', 'Relation Sub Node'); + explorer.createObject('Node', 'relation-SubNode'); explorer.createRepresentation('Root', `${domainName} Diagram Description`, 'diagram'); @@ -156,11 +156,11 @@ describe('Diagram - Node aspect ratio', () => { instanceProjectId = res.projectId; }); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); explorer.select('Entity1'); details.getTextField('Name').type('Node{enter}'); - explorer.createObject('Node', 'Relation Sub Node'); + explorer.createObject('Node', 'relation-SubNode'); explorer.createRepresentation('Root', `${domainName} Diagram Description`, 'diagram'); diff --git a/integration-tests/cypress/e2e/project/explorer/document-context-menu.cy.js b/integration-tests/cypress/e2e/project/explorer/document-context-menu.cy.js index cb58ad9c301..c94964952e4 100644 --- a/integration-tests/cypress/e2e/project/explorer/document-context-menu.cy.js +++ b/integration-tests/cypress/e2e/project/explorer/document-context-menu.cy.js @@ -108,7 +108,7 @@ describe('/projects/:projectId/edit - Document Context Menu', () => { cy.getByTestId('suggested').click({ force: true }); cy.getByTestId('type').click(); - cy.get('[data-value="Entity"]').click(); + cy.get('[data-value="types-Entity"]').click(); cy.getByTestId('create-object').click(); diff --git a/integration-tests/cypress/e2e/project/explorer/object-context-menu.cy.js b/integration-tests/cypress/e2e/project/explorer/object-context-menu.cy.js index 0269d4c23ec..b1fe3e3117a 100644 --- a/integration-tests/cypress/e2e/project/explorer/object-context-menu.cy.js +++ b/integration-tests/cypress/e2e/project/explorer/object-context-menu.cy.js @@ -81,10 +81,10 @@ describe('/projects/:projectId/edit - Object Context Menu', () => { cy.getByTestId('create-object').should('be.enabled'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Power Input"]').click(); + cy.get('[data-value="powerInputs-PowerInput"]').click(); cy.getByTestId('create-object').click(); - cy.getByTestId('explorer://').contains('PowerInput'); + cy.getByTestId('explorer://').contains('Power Input'); }); it('can select the created child object', () => { @@ -96,11 +96,11 @@ describe('/projects/:projectId/edit - Object Context Menu', () => { cy.getByTestId('create-object').should('be.enabled'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Power Input"]').click(); + cy.get('[data-value="powerInputs-PowerInput"]').click(); cy.getByTestId('create-object').click(); - cy.getByTestId('explorer://').contains('PowerInput'); - cy.getByTestId('selected').contains('PowerInput'); + cy.getByTestId('explorer://').contains('Power Input'); + cy.getByTestId('selected').contains('Power Input'); }); it('can open the new representation modal', () => { diff --git a/integration-tests/cypress/e2e/project/formdescriptioneditor/formdescriptioneditor.cy.js b/integration-tests/cypress/e2e/project/formdescriptioneditor/formdescriptioneditor.cy.js index 9ad57b5c116..c484e0469bb 100644 --- a/integration-tests/cypress/e2e/project/formdescriptioneditor/formdescriptioneditor.cy.js +++ b/integration-tests/cypress/e2e/project/formdescriptioneditor/formdescriptioneditor.cy.js @@ -31,7 +31,7 @@ describe('/projects/:projectId/edit - FormDescriptionEditor', () => { //make sure the data are fetched before selecting cy.getByTestId('create-object').should('be.enabled'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Form Description"]').click(); + cy.get('[data-value="descriptions-FormDescription"]').click(); cy.getByTestId('create-object').click(); // create the form description editor cy.getByTestId('New Form Description').click(); @@ -140,55 +140,59 @@ describe('/projects/:projectId/edit - FormDescriptionEditor', () => { cy.getByTestId('New Form Description-more').should('be.enabled').click(); cy.getByTestId('treeitem-contextmenu').findByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); - cy.getByTestId('childCreationDescription').click().get('[data-value="Page Description"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .click() + .get('[data-value="pages-PageDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); // Adds a widget to the first page - cy.getByTestId('PageDescription').eq(0).dblclick(); - cy.getByTestId('GroupDescription').eq(0).click(); - cy.getByTestId('GroupDescription-more').eq(0).should('be.enabled').click(); + cy.getByTestId('Page Description').eq(0).dblclick(); + cy.getByTestId('Group Description').eq(0).click(); + cy.getByTestId('Group Description-more').eq(0).should('be.enabled').click(); cy.getByTestId('treeitem-contextmenu').findByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription') .click() - .get('[data-value="Widgets Pie Chart Description"]') + .get('[data-value="children-PieChartDescription"]') .should('exist') .click(); cy.getByTestId('create-object').click(); // Adds a widget to the second page - cy.getByTestId('PageDescription').eq(1).dblclick(); - cy.getByTestId('GroupDescription').eq(1).click(); - cy.getByTestId('GroupDescription-more').eq(1).should('be.enabled').click(); + cy.getByTestId('Page Description').eq(1).dblclick(); + cy.getByTestId('Group Description').eq(1).click(); + cy.getByTestId('Group Description-more').eq(1).should('be.enabled').click(); cy.getByTestId('treeitem-contextmenu').findByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription') .click() - .get('[data-value="Widgets Bar Chart Description"]') + .get('[data-value="children-BarChartDescription"]') .should('exist') .click(); cy.getByTestId('create-object').click(); // Select the widget from the first page must display it on the editor, and the first page must be selected - cy.getByTestId('PieChartDescription').click(); + cy.getByTestId('Pie Chart Description').click(); cy.getByTestId('PieChart').should('exist'); cy.get('[data-testid^="Page-"]').eq(0).should('have.attr', 'aria-selected', 'true'); cy.get('[data-testid^="Page-"]').eq(1).should('have.attr', 'aria-selected', 'false'); // Select the widget from the second page must display it on the editor, and the second page must be selected - cy.getByTestId('BarChartDescription').click(); + cy.getByTestId('Bar Chart Description').click(); cy.getByTestId('PieChart').should('not.exist'); cy.getByTestId('BarChart').should('exist'); cy.get('[data-testid^="Page-"]').eq(0).should('have.attr', 'aria-selected', 'false'); cy.get('[data-testid^="Page-"]').eq(1).should('have.attr', 'aria-selected', 'true'); // Check page selection for group - cy.getByTestId('GroupDescription').eq(0).click(); + cy.getByTestId('Group Description').eq(0).click(); cy.get('[data-testid^="Page-"]').eq(0).should('have.attr', 'aria-selected', 'true'); cy.get('[data-testid^="Page-"]').eq(1).should('have.attr', 'aria-selected', 'false'); - cy.getByTestId('GroupDescription').eq(1).click(); + cy.getByTestId('Group Description').eq(1).click(); cy.get('[data-testid^="Page-"]').eq(0).should('have.attr', 'aria-selected', 'false'); cy.get('[data-testid^="Page-"]').eq(1).should('have.attr', 'aria-selected', 'true'); // Check page selection for page - cy.getByTestId('PageDescription').eq(0).click(); + cy.getByTestId('Page Description').eq(0).click(); cy.get('[data-testid^="Page-"]').eq(0).should('have.attr', 'aria-selected', 'true'); cy.get('[data-testid^="Page-"]').eq(1).should('have.attr', 'aria-selected', 'false'); - cy.getByTestId('PageDescription').eq(1).click(); + cy.getByTestId('Page Description').eq(1).click(); cy.get('[data-testid^="Page-"]').eq(0).should('have.attr', 'aria-selected', 'false'); cy.get('[data-testid^="Page-"]').eq(1).should('have.attr', 'aria-selected', 'true'); }); @@ -201,16 +205,16 @@ describe('/projects/:projectId/edit - FormDescriptionEditor', () => { cy.getByTestId('FormDescriptionEditor-ReferenceWidget').trigger('dragstart', { dataTransfer }); cy.get('[data-testid^="Group-Widgets-DropArea-"]').trigger('drop', { dataTransfer }); cy.get('[title="ReferenceWidget"]').should('be.visible'); - cy.getByTestId('PageDescription').dblclick(); - cy.getByTestId('GroupDescription').dblclick(); - cy.getByTestId('ReferenceWidgetDescription-more').should('be.enabled').click(); + cy.getByTestId('Page Description').dblclick(); + cy.getByTestId('Group Description').dblclick(); + cy.getByTestId('Reference Widget Description-more').should('be.enabled').click(); cy.getByTestId('treeitem-contextmenu').findByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription') .click() - .get('[data-value="Conditional Styles Conditional Reference Widget Description Style"]') + .get('[data-value="conditionalStyles-ConditionalReferenceWidgetDescriptionStyle"]') .should('exist'); - cy.get('[data-value="Style Widget Description Style"]').should('exist').click(); + cy.get('[data-value="style-ReferenceWidgetDescriptionStyle"]').should('exist').click(); cy.getByTestId('create-object').click(); cy.getByTestId('Font Size').should('exist'); cy.getByTestId('Italic').should('exist'); @@ -236,12 +240,12 @@ describe('/projects/:projectId/edit - FormDescriptionEditor', () => { }); function checkWidgetIsEnabledExpression(widgetName, should) { - cy.getByTestId('GroupDescription-more').should('be.enabled').click(); + cy.getByTestId('Group Description-more').should('be.enabled').click(); cy.getByTestId('treeitem-contextmenu').findByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription') .click() - .get('[data-value="' + widgetName + ' Description"]') + .get('[data-value="' + widgetName + '"]') .should('exist') .click(); cy.getByTestId('create-object').click(); @@ -249,17 +253,17 @@ describe('/projects/:projectId/edit - FormDescriptionEditor', () => { } it('is enabled expression is available only for the editable widgets', () => { - cy.getByTestId('PageDescription').dblclick(); + cy.getByTestId('Page Description').dblclick(); // Not editable widgets shouldn't have isEnabledExpression - checkWidgetIsEnabledExpression('Widgets Link', 'not.exist'); - checkWidgetIsEnabledExpression('Widgets Pie Chart', 'not.exist'); - checkWidgetIsEnabledExpression('Widgets Label', 'not.exist'); + checkWidgetIsEnabledExpression('children-LinkDescription', 'not.exist'); + checkWidgetIsEnabledExpression('children-PieChartDescription', 'not.exist'); + checkWidgetIsEnabledExpression('children-LabelDescription', 'not.exist'); // Editable widgets should have isEnabledExpression - checkWidgetIsEnabledExpression('Widgets Button', 'exist'); - checkWidgetIsEnabledExpression('Widgets Flexbox Container', 'exist'); - checkWidgetIsEnabledExpression('Toolbar Actions Button', 'exist'); - checkWidgetIsEnabledExpression('Widgets Slider', 'exist'); + checkWidgetIsEnabledExpression('children-ButtonDescription', 'exist'); + checkWidgetIsEnabledExpression('children-FlexboxContainerDescription', 'exist'); + checkWidgetIsEnabledExpression('toolbarActions-ButtonDescription', 'exist'); + checkWidgetIsEnabledExpression('children-SliderDescription', 'exist'); }); function createBorderStyleAndCheckProperties(styleName) { @@ -280,17 +284,17 @@ describe('/projects/:projectId/edit - FormDescriptionEditor', () => { } it('can create border style in a Group', () => { - cy.getByTestId('PageDescription').dblclick(); - cy.getByTestId('GroupDescription-more').should('be.enabled').click(); - createBorderStyleAndCheckProperties('Border Style Container Border Style'); + cy.getByTestId('Page Description').dblclick(); + cy.getByTestId('Group Description-more').should('be.enabled').click(); + createBorderStyleAndCheckProperties('borderStyle-ContainerBorderStyle'); - cy.getByTestId('GroupDescription-more').should('be.enabled').click(); - createBorderStyleAndCheckProperties('Conditional Border Styles Conditional Container Border Style'); + cy.getByTestId('Group Description-more').should('be.enabled').click(); + createBorderStyleAndCheckProperties('conditionalBorderStyles-ConditionalContainerBorderStyle'); cy.getByTestId('Condition').should('exist'); }); it('can create border style in a Flexbox Container', () => { - cy.getByTestId('PageDescription').dblclick(); + cy.getByTestId('Page Description').dblclick(); // Create a Flexbox inside the Group var dataTransfer = new DataTransfer(); @@ -298,12 +302,12 @@ describe('/projects/:projectId/edit - FormDescriptionEditor', () => { cy.get('[data-testid^="Group-Widgets-DropArea-"]').trigger('drop', { dataTransfer }); cy.get('[title="FlexboxContainer"]').should('be.visible'); - cy.getByTestId('GroupDescription').dblclick(); - cy.getByTestId('FlexboxContainerDescription-more').click(); - createBorderStyleAndCheckProperties('Border Style Container Border Style'); + cy.getByTestId('Group Description').dblclick(); + cy.getByTestId('Flexbox Container Description-more').click(); + createBorderStyleAndCheckProperties('borderStyle-ContainerBorderStyle'); - cy.getByTestId('FlexboxContainerDescription-more').click(); - createBorderStyleAndCheckProperties('Conditional Border Styles Conditional Container Border Style'); + cy.getByTestId('Flexbox Container Description-more').click(); + createBorderStyleAndCheckProperties('conditionalBorderStyles-ConditionalContainerBorderStyle'); cy.getByTestId('Condition').should('exist'); }); diff --git a/integration-tests/cypress/e2e/project/forms/widget-reference.cy.ts b/integration-tests/cypress/e2e/project/forms/widget-reference.cy.ts index 3107fd69641..649559ff7f2 100644 --- a/integration-tests/cypress/e2e/project/forms/widget-reference.cy.ts +++ b/integration-tests/cypress/e2e/project/forms/widget-reference.cy.ts @@ -22,14 +22,14 @@ import { Form } from '../../../workbench/Form'; const createFormWithWidgetRef = (domainType: string, name: string, reference: string) => { const explorer = new Explorer(); const details = new Details(); - explorer.createObject('View', 'Form Description'); + explorer.createObject('View', 'descriptions-FormDescription'); explorer.select('New Form Description'); details.getTextField('Domain Type').type(domainType); details.getTextField('Name').type(`{selectall}${name}{enter}`); details.getTextField('Title Expression').type(`{selectall}${name}{enter}`); explorer.expand(name); - explorer.expand('PageDescription'); - explorer.createObject('GroupDescription', 'Widgets Reference Widget Description'); + explorer.expand('Page Description'); + explorer.createObject('Group Description', 'children-ReferenceWidgetDescription'); details.getTextField('Reference Name Expression').should('exist'); details.getTextField('Label Expression').type('Test Widget Reference'); details.getTextField('Reference Name Expression').type(`${reference}{enter}`); @@ -141,7 +141,7 @@ describe('Forms Widget-reference', () => { explorer.getTreeItemByLabel('standard').trigger('dragstart', { dataTransfer: dataTransferStandardExplorer }); form.getWidget('Test Widget Reference').trigger('drop', { dataTransfer: dataTransferStandardExplorer }); form.getWidgetElement('Test Widget Reference', 'reference-value-standard').should('exist'); - explorer.createObject('DataSource1', 'Data Flow'); + explorer.createObject('DataSource1', 'outgoingFlows-DataFlow'); form.getWidget('Test Widget Reference').click(); cy.getByTestId('option-standard').should('not.exist'); cy.getByTestId('option-unused').should('exist'); @@ -170,7 +170,10 @@ describe('Forms Widget-reference', () => { .should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); cy.getByTestId('childCreationDescription').get('[data-value]').should('have.length', 1); - cy.getByTestId('childCreationDescription').get('[data-value="Power Output"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="powerOutputs-PowerOutput"]') + .should('exist') + .click(); cy.getByTestId('create-modal').findByTestId('create-object').click(); cy.getByTestId('reference-value-1000').should('exist'); explorer.getTreeItemByLabel('1000').should('exist'); @@ -202,7 +205,10 @@ describe('Forms Widget-reference', () => { .should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); cy.getByTestId('childCreationDescription').get('[data-value]').should('have.length', 1); - cy.getByTestId('childCreationDescription').get('[data-value="Power Output"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="powerOutputs-PowerOutput"]') + .should('exist') + .click(); cy.getByTestId('create-modal').findByTestId('create-object').click(); cy.getByTestId('reference-value-1000').should('exist'); explorer.getTreeItemByLabel('1000').should('exist'); @@ -258,7 +264,7 @@ describe('Forms Widget-reference', () => { cy.getByTestId('childCreationDescription') .get('[data-value]') .should('have.length', 2) - .get('[data-value="Elements Data Flow"]') + .get('[data-value="elements-DataFlow"]') .should('exist') .click(); cy.getByTestId('create-modal').findByTestId('create-object').click(); @@ -297,21 +303,21 @@ describe('Forms Widget-reference', () => { const explorer = new Explorer(); const details = new Details(); const form = new Form(); - explorer.createObject(domainName, 'Entity'); + explorer.createObject(domainName, 'types-Entity'); details.getTextField('Name').should('have.value', 'NewEntity'); details.getTextField('Name').type('{selectall}SuperEntity1{enter}'); details.getCheckBox('Abstract').check(); - explorer.createObject(domainName, 'Entity'); + explorer.createObject(domainName, 'types-Entity'); details.getTextField('Name').should('have.value', 'NewEntity'); details.getTextField('Name').type('{selectall}MonoValuedContainment{enter}'); - explorer.createObject('MonoValuedContainment', 'Attribute'); + explorer.createObject('MonoValuedContainment', 'attributes-Attribute'); details.getTextField('Name').should('have.value', 'newString'); details.getTextField('Name').type('{selectall}Name{enter}'); - explorer.createObject('SuperEntity1', 'Relation'); + explorer.createObject('SuperEntity1', 'relations-Relation'); details.getCheckBox('Containment').check(); details.getCheckBox('Many').uncheck(); details.openReferenceWidgetOptions('Target Type'); @@ -319,7 +325,7 @@ describe('Forms Widget-reference', () => { explorer.select('Entity1'); details.getTextField('Name').should('have.value', 'Entity1'); - details.openReferenceWidgetOptions('Super Type'); + details.openReferenceWidgetOptions('Super Types'); details.selectReferenceWidgetOption('SuperEntity1'); explorer.expand('ViewNewModel'); @@ -329,7 +335,7 @@ describe('Forms Widget-reference', () => { instanceProjectId = res.projectId; }); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); explorer.select('Entity1'); details.getTextField('Name').type('{selectall}Entity1{enter}'); @@ -345,7 +351,7 @@ describe('Forms Widget-reference', () => { cy.getByTestId('childCreationDescription').click(); cy.getByTestId('childCreationDescription').get('[data-value]').should('have.length', 1); cy.getByTestId('childCreationDescription') - .get('[data-value="Relation Mono Valued Containment"]') + .get('[data-value="relation-MonoValuedContainment"]') .should('exist') .click(); cy.getByTestId('create-modal').findByTestId('create-object').click(); @@ -365,7 +371,7 @@ describe('Forms Widget-reference', () => { cy.getByTestId('childCreationDescription').click(); cy.getByTestId('childCreationDescription').get('[data-value]').should('have.length', 1); cy.getByTestId('childCreationDescription') - .get('[data-value="Relation Mono Valued Containment"]') + .get('[data-value="relation-MonoValuedContainment"]') .should('exist') .click(); cy.getByTestId('create-modal').findByTestId('create-object').click(); @@ -378,28 +384,28 @@ describe('Forms Widget-reference', () => { const form = new Form(); explorer.expand(domainName); - explorer.createObject('Entity1', 'Relation'); + explorer.createObject('Entity1', 'relations-Relation'); details.getCheckBox('Containment').check(); details.openReferenceWidgetOptions('Target Type'); details.selectReferenceWidgetOption('Entity2'); - explorer.createObject('Entity2', 'Relation'); + explorer.createObject('Entity2', 'relations-Relation'); details.getCheckBox('Containment').check(); details.openReferenceWidgetOptions('Target Type'); details.selectReferenceWidgetOption('Entity1'); explorer.expand('ViewNewModel'); - explorer.createObject('View', 'Form Description'); + explorer.createObject('View', 'descriptions-FormDescription'); explorer.select('New Form Description'); details.getTextField('Domain Type').type(`${domainName}::Entity1`); details.getTextField('Name').type(`{selectall}WidgetRefRepresentation{enter}`); details.getTextField('Title Expression').type(`{selectall}WidgetRefRepresentation{enter}`); explorer.expand('WidgetRefRepresentation'); - explorer.expand('PageDescription'); - explorer.createObject('GroupDescription', 'Widgets Reference Widget Description'); + explorer.expand('Page Description'); + explorer.createObject('Group Description', 'children-ReferenceWidgetDescription'); details.getTextField('Reference Name Expression').should('exist'); details.getTextField('Label Expression').type('Test Widget Reference linkedTo'); details.getTextField('Reference Name Expression').type(`linkedTo{enter}`); - explorer.createObject('GroupDescription', 'Widgets Reference Widget Description'); + explorer.createObject('Group Description', 'children-ReferenceWidgetDescription'); details.getTextField('Reference Name Expression').should('exist'); details.getTextField('Label Expression').type('Test Widget Reference relation'); details.getTextField('Reference Name Expression').type(`relation{enter}`); @@ -408,10 +414,10 @@ describe('Forms Widget-reference', () => { instanceProjectId = res.projectId; }); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity2s-Entity2'); explorer.select('Entity2'); details.getTextField('Name').type('{selectall}Entity2{enter}'); - explorer.createObject('Entity2', 'Relation Entity1'); + explorer.createObject('Entity2', 'relation-Entity1'); explorer.createRepresentation('Entity1', 'WidgetRefRepresentation', 'WidgetRefRepresentation'); form.getWidget('Test Widget Reference linkedTo').click(); diff --git a/integration-tests/cypress/e2e/project/studio/color-palette.cy.js b/integration-tests/cypress/e2e/project/studio/color-palette.cy.js index 840b0133b4b..3a4729f0f3d 100644 --- a/integration-tests/cypress/e2e/project/studio/color-palette.cy.js +++ b/integration-tests/cypress/e2e/project/studio/color-palette.cy.js @@ -22,21 +22,21 @@ describe('/projects/:projectId/edit - Color Palette', () => { it('check the default color palette exist and populated', () => { cy.getByTestId('ViewNewModel-toggle').click(); cy.getByTestId('View-toggle').click(); - cy.getByTestId('ColorPalette').should('exist'); - cy.getByTestId('ColorPalette-toggle').click(); - cy.getByTestId('ColorPalette').should('exist'); + cy.getByTestId('Color Palette').should('exist'); + cy.getByTestId('Color Palette-toggle').click(); + cy.getByTestId('Color Palette').should('exist'); cy.getByTestId('color_dark').should('exist'); }); it('can add new fixed color to palette color', () => { cy.getByTestId('ViewNewModel-toggle').click(); cy.getByTestId('View-toggle').click(); - cy.getByTestId('ColorPalette-more').click(); + cy.getByTestId('Color Palette-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); - cy.getByTestId('childCreationDescription').click().get('[data-value="Fixed Color"]').should('exist').click(); + cy.getByTestId('childCreationDescription').click().get('[data-value="colors-FixedColor"]').should('exist').click(); cy.getByTestId('create-object').click(); - cy.getByTestId('FixedColor').should('exist').click(); + cy.getByTestId('Fixed Color').should('exist').click(); cy.getByTestId('Name').type('color_test{enter}'); cy.getByTestId('Value').type('#e5f5f8{enter}'); cy.getByTestId('color_test').should('exist'); @@ -48,14 +48,18 @@ describe('/projects/:projectId/edit - Color Palette', () => { cy.getByTestId('View-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); - cy.getByTestId('childCreationDescription').click().get('[data-value="Color Palette"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .click() + .get('[data-value="colorPalettes-ColorPalette"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); cy.getByTestId('New Color Palette').should('exist').click(); cy.getByTestId('Name').clear().type('OtherColorPalette{enter}'); cy.getByTestId('OtherColorPalette-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); - cy.getByTestId('childCreationDescription').click().get('[data-value="Fixed Color"]').should('exist'); + cy.getByTestId('childCreationDescription').click().get('[data-value="colors-FixedColor"]').should('exist'); }); it('can select color from color palette in node style properties', () => { diff --git a/integration-tests/cypress/e2e/project/studio/studio.cy.ts b/integration-tests/cypress/e2e/project/studio/studio.cy.ts index 895e243d51a..94da7336d93 100644 --- a/integration-tests/cypress/e2e/project/studio/studio.cy.ts +++ b/integration-tests/cypress/e2e/project/studio/studio.cy.ts @@ -13,8 +13,8 @@ import { Project } from '../../../pages/Project'; import { Studio } from '../../../usecases/Studio'; -import { Explorer } from '../../../workbench/Explorer'; import { Details } from '../../../workbench/Details'; +import { Explorer } from '../../../workbench/Explorer'; describe('/projects/:projectId/edit - Studio', () => { context('Given a studio template', () => { @@ -72,20 +72,20 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('ViewNewModel').dblclick(); cy.getByTestId('View').dblclick(); cy.get('[data-testid$=" Diagram Description"]').dblclick(); - cy.getByTestId('DiagramPalette').should('exist'); - cy.getByTestId('DiagramPalette-more').click(); + cy.getByTestId('Palette').should('exist'); + cy.getByTestId('Palette-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').find('input').invoke('val').should('not.be.empty'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Diagram Tool Section"]').should('exist').click(); + cy.get('[data-value="toolSections-DiagramToolSection"]').should('exist').click(); cy.getByTestId('create-object').click(); cy.getByTestId('Tool Section').should('exist'); cy.getByTestId('Tool Section-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').find('input').invoke('val').should('not.be.empty'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Node Tool"]').should('exist'); - cy.get('[data-value="Edge Tool"]').should('not.exist'); + cy.get('[data-value="nodeTools-NodeTool"]').should('exist'); + cy.get('[data-value="edgeTools-EdgeTool"]').should('not.exist'); }); it('Check the NodePalette toolSection creation', () => { @@ -93,20 +93,20 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('View').dblclick(); cy.get('[data-testid$=" Diagram Description"]').dblclick(); cy.getByTestId('Entity1 Node').dblclick(); - cy.getByTestId('NodePalette-more').click(); + cy.getByTestId('Node Palette-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').find('input').invoke('val').should('not.be.empty'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Node Tool Section"]').should('exist').click(); + cy.get('[data-value="toolSections-NodeToolSection"]').should('exist').click(); cy.getByTestId('create-object').click(); cy.getByTestId('Tool Section').should('exist'); cy.getByTestId('Tool Section-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').find('input').invoke('val').should('not.be.empty'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Node Tool"]').should('exist'); - cy.get('[data-value="Edge Tool"]').should('exist'); - cy.get('[data-value="Source Edge End Reconnection Tool"]').should('not.exist'); + cy.get('[data-value="nodeTools-NodeTool"]').should('exist'); + cy.get('[data-value="edgeTools-EdgeTool"]').should('exist'); + cy.get('[data-value="edgeReconnectionTools-SourceEdgeEndReconnectionTool"]').should('not.exist'); }); it('Check the EdgePalette toolSection creation', () => { @@ -114,21 +114,21 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('View').dblclick(); cy.get('[data-testid$=" Diagram Description"]').dblclick(); cy.getByTestId('LinkedTo Edge').dblclick(); - cy.getByTestId('EdgePalette-more').click(); + cy.getByTestId('Edge Palette-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').find('input').invoke('val').should('not.be.empty'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Edge Tool Section"]').should('exist').click(); + cy.get('[data-value="toolSections-EdgeToolSection"]').should('exist').click(); cy.getByTestId('create-object').click(); cy.getByTestId('Tool Section').should('exist'); cy.getByTestId('Tool Section-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').find('input').invoke('val').should('not.be.empty'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Node Tool"]').should('exist'); - cy.get('[data-value="Edge Tool"]').should('not.exist'); - cy.get('[data-value="Source Edge End Reconnection Tool"]').should('not.exist'); - cy.get('[data-value="Target Edge End Reconnection Tool"]').should('not.exist'); + cy.get('[data-value="nodeTools-NodeTool"]').should('exist'); + cy.get('[data-value="edgeTools-EdgeTool"]').should('not.exist'); + cy.get('[data-value="edgeReconnectionTools-SourceEdgeEndReconnectionTool"]').should('not.exist'); + cy.get('[data-value="edgeReconnectionTools-TargetEdgeEndReconnectionTool"]').should('not.exist'); }); it.skip('Check the precondition on tools', () => { @@ -139,7 +139,7 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Node Tool"]').should('exist').click(); + cy.getByTestId('childCreationDescription').get('[data-value="nodeTools-NodeTool"]').should('exist').click(); cy.getByTestId('create-object').click(); cy.getByTestId('Precondition Expression').should('exist'); cy.getByTestId('Precondition Expression').type('aql:self.eAllContents()->size()>0'); @@ -200,13 +200,13 @@ describe('/projects/:projectId/edit - Studio', () => { explorer.expand('ViewNewModel'); explorer.expand('View'); explorer.expand(`${domainName} Diagram Description`); - explorer.createObject(`${domainName} Diagram Description`, 'Node Description'); + explorer.createObject(`${domainName} Diagram Description`, 'nodeDescriptions-NodeDescription'); explorer.expand('Node'); - explorer.select('RectangularNodeStyleDescription'); + explorer.select('Rectangular Node Style Description 3'); details.getReferenceWidgetSelectedValue('Background', 'white').should('exist'); details.getReferenceWidgetSelectedValue('Border Color', 'black').should('exist'); - explorer.delete('RectangularNodeStyleDescription'); - explorer.createObject('Node', 'Style Icon-Label'); + explorer.delete('Rectangular Node Style Description 3'); + explorer.createObject('Node', 'style-IconLabelNodeStyleDescription'); details.getReferenceWidgetSelectedValue('Background', 'white').should('exist'); details.getReferenceWidgetSelectedValue('Border Color', 'black').should('exist'); }); @@ -219,17 +219,23 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Node Description"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="nodeDescriptions-NodeDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); cy.getByTestId('Node-toggle').click(); cy.getByTestId('Node-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Sub-node"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="childrenDescriptions-NodeDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); cy.getByTestId('Sub-node-toggle').click(); - cy.getByTestId('RectangularNodeStyleDescription').eq(1).click(); + cy.getByTestId('Rectangular Node Style Description 3').eq(1).click(); cy.getByTestId('Background').findByTestId('reference-value-white').should('exist'); cy.getByTestId('Border Color').findByTestId('reference-value-black').should('exist'); }); @@ -242,17 +248,23 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Node Description"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="nodeDescriptions-NodeDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); cy.getByTestId('Node-toggle').click(); cy.getByTestId('Node-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Border node"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="borderNodesDescriptions-NodeDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); cy.getByTestId('Border node-toggle').click(); - cy.getByTestId('RectangularNodeStyleDescription').eq(1).click(); + cy.getByTestId('Rectangular Node Style Description 3').eq(1).click(); cy.getByTestId('Background').findByTestId('reference-value-white').should('exist'); cy.getByTestId('Border Color').findByTestId('reference-value-black').should('exist'); }); @@ -262,15 +274,18 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('View-toggle').click(); cy.get('[data-testid$=" Diagram Description"]').dblclick(); cy.getByTestId('Entity1 Node-toggle').click(); - cy.getByTestId('RectangularNodeStyleDescription-more').click(); + cy.getByTestId('Rectangular Node Style Description 3-more').click(); cy.getByTestId('delete').click(); cy.getByTestId('Entity1 Node-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Style Rectangular"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="style-RectangularNodeStyleDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); - cy.getByTestId('RectangularNodeStyleDescription').click(); + cy.getByTestId('Rectangular Node Style Description 3').click(); cy.getByTestId('Background').findByTestId('reference-value-white').should('exist'); cy.getByTestId('Border Color').findByTestId('reference-value-black').should('exist'); }); @@ -283,10 +298,13 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Edge Description"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="edgeDescriptions-EdgeDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); cy.getByTestId('Edge').dblclick(); - cy.getByTestId('EdgeStyle').click(); + cy.getByTestId('Edge Style 14').click(); cy.getByTestId('Color').findByTestId('reference-value-black').should('exist'); }); @@ -297,30 +315,33 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Form Description"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="descriptions-FormDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); cy.getByTestId('New Form Description').dblclick(); - cy.getByTestId('PageDescription').dblclick(); - cy.getByTestId('GroupDescription').dblclick(); - cy.getByTestId('GroupDescription-more').click(); + cy.getByTestId('Page Description').dblclick(); + cy.getByTestId('Group Description').dblclick(); + cy.getByTestId('Group Description-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); cy.getByTestId('childCreationDescription') - .get('[data-value="Widgets Textfield Description"]') + .get('[data-value="children-TextfieldDescription"]') .should('exist') .click(); cy.getByTestId('create-object').click(); - cy.getByTestId('TextfieldDescription-more').click(); + cy.getByTestId('Textfield Description-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); cy.getByTestId('childCreationDescription') - .get('[data-value="Style Textfield Description Style"]') + .get('[data-value="style-TextfieldDescriptionStyle"]') .should('exist') .click(); cy.getByTestId('create-object').click(); - cy.getByTestId('TextfieldDescriptionStyle').click(); + cy.getByTestId('Textfield Description Style 14').click(); cy.getByTestId('Background Color').findByTestId('reference-value-transparent').should('exist'); cy.getByTestId('Foreground Color').findByTestId('reference-value-theme.palette.text.primary').should('exist'); @@ -337,7 +358,10 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Node Description"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="nodeDescriptions-NodeDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); cy.getByTestId('Node').click(); cy.getByTestId('Default Width Expression').should('exist'); diff --git a/integration-tests/cypress/workbench/Deck.ts b/integration-tests/cypress/workbench/Deck.ts index 6e211938935..52d5714646e 100644 --- a/integration-tests/cypress/workbench/Deck.ts +++ b/integration-tests/cypress/workbench/Deck.ts @@ -140,7 +140,9 @@ export class Deck { { condition, backgroundColor, color, italic, bold, underline, strikeThrough, fontSize }: ElementStyleProps ) { const details = new Details(); - const objectName = `${condition ? 'Conditional Style' : 'Style'} Description`; + const objectName = condition + ? 'conditionalStyles-ConditionalDeckElementDescriptionStyle' + : 'style-DeckElementDescriptionStyle'; cy.createChildObject(elementName, objectName); details.openReferenceWidgetOptions('Background Color'); details.selectReferenceWidgetOption(backgroundColor); @@ -162,7 +164,7 @@ export class Deck { public createDeckRepresentationtyle(elementName: string, backgroundColor: string, condition?: string) { const details = new Details(); - const objectName = `${condition ? 'Conditional Style' : 'Style'} Description`; + const objectName = condition ? 'conditionalStyles-ConditionalDeckDescriptionStyle' : 'style-DeckDescriptionStyle'; cy.createChildObject(elementName, objectName); details.openReferenceWidgetOptions('Background Color'); details.selectReferenceWidgetOption(backgroundColor); diff --git a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/resources/messages/sirius-web-spring-collaborative-diagrams_ru.properties b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/resources/messages/sirius-web-spring-collaborative-diagrams_ru.properties new file mode 100644 index 00000000000..1dc354d0895 --- /dev/null +++ b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/resources/messages/sirius-web-spring-collaborative-diagrams_ru.properties @@ -0,0 +1,24 @@ +################################################################################################ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation +################################################################################################ +INVALID_INPUT=\u041D\u0435\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u044B\u0439 \u0442\u0438\u043F "{0}", \u043E\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F "{1}" +EDGE_NOT_FOUND=\u0421\u0432\u044F\u0437\u044C "{0}" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u0430 +RECONNECT_EDGE_SAME_EDGE_END=\u0421\u0432\u044F\u0437\u044C \u0441\u0441\u044B\u043B\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u0442\u043E\u0442 \u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 +NODE_NOT_FOUND=\u0424\u0438\u0433\u0443\u0440\u0430 "{0}" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u0430 +SEMANTIC_OBJECT_NOT_FOUND=\u0421\u0435\u043C\u0430\u043D\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D +NODE_DESCRIPTION_NOT_FOUND=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0444\u0438\u0433\u0443\u0440 "{0}" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u0430 +EDGE_DESCRIPTION_NOT_FOUND=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0441\u0432\u044F\u0437\u0435\u0439 "{0}" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u0430 +DELETE_EGDE_FAILED=\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0432\u044F\u0437\u044C "{0}" +DELETE_NODE_FAILED=\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0444\u0438\u0433\u0443\u0440\u0443 "{0}" +DELETE_FAILED=\u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043A\u0430\u043A \u043C\u0438\u043D\u0438\u043C\u0443\u043C \u043E\u0434\u043D\u0430 \u043E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0438: +INVALID_DROP=\u041D\u0435\u043B\u044C\u0437\u044F \u043F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u044C \u044D\u0442\u043E\u0442 \u043E\u0431\u044A\u0435\u043A\u0442 \u0441\u044E\u0434\u0430 +INVALID_NEW_VALUE=\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 "{0}" \u043D\u0435\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E diff --git a/packages/domain/backend/sirius-components-domain-edit/src/main/resources/plugin_ru.properties b/packages/domain/backend/sirius-components-domain-edit/src/main/resources/plugin_ru.properties new file mode 100644 index 00000000000..68422a44b19 --- /dev/null +++ b/packages/domain/backend/sirius-components-domain-edit/src/main/resources/plugin_ru.properties @@ -0,0 +1,49 @@ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation + +pluginName = Domain Edit Support +providerName = www.example.org + +_UI_CreateChild_text = {0} +_UI_CreateChild_text2 = {1} "{0}" +_UI_CreateChild_text3 = {1} +_UI_CreateChild_tooltip = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" +_UI_CreateChild_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}". +_UI_CreateSibling_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0441\u043E\u0441\u0435\u0434\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}", \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u0438\u0445 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u043E\u0431\u044A\u0435\u043A\u0442\u0430. + +_UI_PropertyDescriptor_description = \u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E "{0}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{1}" + +_UI_NamedElement_type = \u0418\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 +_UI_Domain_type = \u041F\u0440\u0435\u0434\u043C\u0435\u0442\u043D\u0430\u044F \u043E\u0431\u043B\u0430\u0441\u0442\u044C +_UI_Entity_type = \u0421\u0443\u0449\u043D\u043E\u0441\u0442\u044C +_UI_Feature_type = \u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E +_UI_Attribute_type = \u0410\u0442\u0440\u0438\u0431\u0443\u0442 +_UI_Relation_type = \u041E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u0435 +_UI_Unknown_type = \u041E\u0431\u044A\u0435\u043A\u0442 + +_UI_Unknown_datatype = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 + +_UI_NamedElement_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_Domain_types_feature = \u0422\u0438\u043F\u044B +_UI_Entity_attributes_feature = \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044B +_UI_Entity_relations_feature = \u041E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u044F +_UI_Entity_superTypes_feature = \u0420\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u0442\u0438\u043F\u044B +_UI_Entity_abstract_feature = \u0410\u0431\u0441\u0442\u0440\u0430\u043A\u0442\u043D\u044B\u0439 +_UI_Feature_optional_feature = \u041D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 +_UI_Feature_many_feature = \u041C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 +_UI_Attribute_type_feature = \u0422\u0438\u043F +_UI_Relation_containment_feature = \u0427\u0430\u0441\u0442\u044C-\u0446\u0435\u043B\u043E\u0435 +_UI_Relation_targetType_feature = \u0422\u0438\u043F +_UI_Unknown_feature = \u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E + +_UI_DataType_STRING_literal = \u0441\u0442\u0440\u043E\u043A\u0430 +_UI_DataType_BOOLEAN_literal = \u043B\u043E\u0433\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 +_UI_DataType_NUMBER_literal = \u0447\u0438\u0441\u043B\u043E diff --git a/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EEnumIfDescriptionProvider.java b/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EEnumIfDescriptionProvider.java index e942990f559..588eb47c55e 100644 --- a/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EEnumIfDescriptionProvider.java +++ b/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EEnumIfDescriptionProvider.java @@ -128,13 +128,7 @@ private Function getOptionIdProvider() { } private Function getOptionLabelProvider() { - return variableManager -> { - Object litteral = variableManager.getVariables().get(SelectComponent.CANDIDATE_VARIABLE); - if (litteral instanceof Enumerator) { - return ((Enumerator) litteral).getLiteral(); - } - return ""; - }; + return new EEnumLiteralLabelProvider(EMFFormDescriptionProvider.ESTRUCTURAL_FEATURE, this.composedAdapterFactory); } private Function getOptionSelectedProvider() { diff --git a/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EEnumLiteralLabelProvider.java b/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EEnumLiteralLabelProvider.java new file mode 100644 index 00000000000..93867bfff8d --- /dev/null +++ b/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EEnumLiteralLabelProvider.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2024 Obeo. + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.sirius.components.emf.forms; + +import java.util.Objects; +import java.util.function.Function; + +import org.eclipse.emf.common.notify.Adapter; +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.common.util.Enumerator; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.IItemPropertySource; +import org.eclipse.sirius.components.forms.components.SelectComponent; +import org.eclipse.sirius.components.representations.VariableManager; + +/** + * Utility class used to provide a label for an enumeration literal in the variable manager. + * + * @author aresekb + */ +public class EEnumLiteralLabelProvider implements Function { + + private final String featureVariableName; + + private final AdapterFactory adapterFactory; + + public EEnumLiteralLabelProvider(String featureVariableName, AdapterFactory adapterFactory) { + this.featureVariableName = Objects.requireNonNull(featureVariableName); + this.adapterFactory = Objects.requireNonNull(adapterFactory); + } + + @Override + public String apply(VariableManager variableManager) { + Object object = variableManager.getVariables().get(VariableManager.SELF); + Object feature = variableManager.getVariables().get(this.featureVariableName); + Object literal = variableManager.getVariables().get(SelectComponent.CANDIDATE_VARIABLE); + + String result = ""; + if (object instanceof EObject eObject && feature instanceof EStructuralFeature eStructuralFeature) { + Adapter adapter = this.adapterFactory.adapt(eObject, IItemPropertySource.class); + if (adapter instanceof IItemPropertySource itemPropertySource) { + IItemPropertyDescriptor descriptor = itemPropertySource.getPropertyDescriptor(eObject, eStructuralFeature); + if (descriptor != null) { + result = descriptor.getLabelProvider(eObject).getText(literal); + } + } + } + if (result.isEmpty() && literal instanceof Enumerator enumerator) { + result = enumerator.getLiteral(); + } + return result; + } + +} diff --git a/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EMFFormDescriptionProvider.java b/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EMFFormDescriptionProvider.java index c0d0944d7c0..48ca9727699 100644 --- a/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EMFFormDescriptionProvider.java +++ b/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EMFFormDescriptionProvider.java @@ -204,7 +204,7 @@ private GroupDescription getGroupDescription() { return GroupDescription.newGroupDescription("groupId") .idProvider(variableManager -> "Core Properties") - .labelProvider(variableManager -> "Core Properties") + .labelProvider(variableManager -> this.emfMessageService.coreProperties()) .semanticElementsProvider(variableManager -> Collections.singletonList(variableManager.getVariables().get(VariableManager.SELF))) .controlDescriptions(controlDescriptions) .build(); diff --git a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/DefaultEditService.java b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/DefaultEditService.java index 618253f112d..18cca4afb92 100644 --- a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/DefaultEditService.java +++ b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/DefaultEditService.java @@ -146,9 +146,10 @@ public List getChildCreationDescriptions(IEditingConte if (adapter instanceof IEditingDomainItemProvider editingDomainItemProvider) { if (editingDomainItemProvider instanceof Helper helper) { for (CommandParameter commandParameter : commandParameters) { - String text = helper.getCreateChildText(eObject, commandParameter.getFeature(), commandParameter.getValue(), null); + String id = this.getChildCreationDescriptionId(commandParameter); + String label = helper.getCreateChildText(eObject, commandParameter.getFeature(), commandParameter.getValue(), null); List iconURL = this.objectService.getImagePath(commandParameter.getValue()); - ChildCreationDescription childCreationDescription = new ChildCreationDescription(text, text, iconURL); + ChildCreationDescription childCreationDescription = new ChildCreationDescription(id, label, iconURL); childCreationDescriptions.add(childCreationDescription); } } @@ -166,37 +167,30 @@ public Optional createChild(IEditingContext editingContext, Object objec .map(IEMFEditingContext.class::cast) .map(IEMFEditingContext::getDomain); - Optional optionalEObject = Optional.of(object) + var optionalEObject = Optional.of(object) .filter(EObject.class::isInstance) .map(EObject.class::cast); if (optionalEditingDomain.isPresent() && optionalEObject.isPresent()) { - AdapterFactoryEditingDomain editingDomain = optionalEditingDomain.get(); - EObject eObject = optionalEObject.get(); - - Collection newChildDescriptors = editingDomain.getNewChildDescriptors(eObject, null); - - List commandParameters = newChildDescriptors.stream() + var editingDomain = optionalEditingDomain.get(); + var eObject = optionalEObject.get(); + var newChildDescriptors = editingDomain.getNewChildDescriptors(eObject, null); + return newChildDescriptors.stream() .filter(CommandParameter.class::isInstance) .map(CommandParameter.class::cast) - .toList(); - - Adapter adapter = editingDomain.getAdapterFactory().adapt(eObject, IEditingDomainItemProvider.class); - if (adapter instanceof IEditingDomainItemProvider editingDomainItemProvider) { - if (editingDomainItemProvider instanceof Helper helper) { - for (CommandParameter commandParameter : commandParameters) { - String text = helper.getCreateChildText(eObject, commandParameter.getFeature(), commandParameter.getValue(), null); - - if (childCreationDescriptionId.equals(text)) { - return this.createObject(editingDomain, eObject, commandParameter); - } - } - } - } + .filter(commandParameter -> childCreationDescriptionId.equals(this.getChildCreationDescriptionId(commandParameter))) + .findFirst() + .flatMap(commandParameter -> this.createObject(editingDomain, eObject, commandParameter)); } return Optional.empty(); } + private String getChildCreationDescriptionId(CommandParameter commandParameter) { + var containment = (EReference) commandParameter.getFeature(); + var value = (EObject) commandParameter.getValue(); + return containment.getName() + "-" + value.eClass().getName(); + } + private Optional createObject(AdapterFactoryEditingDomain editingDomain, EObject eObject, CommandParameter commandParameter) { Optional objectOptional = Optional.empty(); diff --git a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/DefaultLabelService.java b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/DefaultLabelService.java index b1b8351ce70..3ee215f71fa 100644 --- a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/DefaultLabelService.java +++ b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/DefaultLabelService.java @@ -64,6 +64,12 @@ public String getLabel(Object object) { .map(eObject::eGet) .map(Object::toString) .orElse(""); + if (label.isBlank()) { + Adapter adapter = this.composedAdapterFactory.adapt(eObject, IItemLabelProvider.class); + if (adapter instanceof IItemLabelProvider labelProvider && !(adapter instanceof ReflectiveItemProvider)) { + label = labelProvider.getText(eObject); + } + } } else if (object instanceof IRepresentation representation) { label = representation.getLabel(); } diff --git a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/messages/EMFMessageService.java b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/messages/EMFMessageService.java index a283a0bbcce..7d9e3f259ce 100644 --- a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/messages/EMFMessageService.java +++ b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/messages/EMFMessageService.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2023 Obeo. + * Copyright (c) 2019, 2024 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -52,4 +52,24 @@ public String upperBoundaryReached(String newInstanceClass, String feature) { return this.messageSourceAccessor.getMessage("UPPER_BOUNDARY_REACHED", new Object[] { newInstanceClass, feature }); } + @Override + public String properties() { + return this.messageSourceAccessor.getMessage("PROPERTIES"); + } + + @Override + public String coreProperties() { + return this.messageSourceAccessor.getMessage("CORE_PROPERTIES"); + } + + @Override + public String general() { + return this.messageSourceAccessor.getMessage("GENERAL"); + } + + @Override + public String shapePreview() { + return this.messageSourceAccessor.getMessage("SHAPE_PREVIEW"); + } + } diff --git a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/messages/IEMFMessageService.java b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/messages/IEMFMessageService.java index f8bd0f34c88..08a2219ad11 100644 --- a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/messages/IEMFMessageService.java +++ b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/messages/IEMFMessageService.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2023 Obeo. + * Copyright (c) 2019, 2024 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -27,6 +27,14 @@ public interface IEMFMessageService { String upperBoundaryReached(String newInstanceClass, String feature); + String properties(); + + String coreProperties(); + + String general(); + + String shapePreview(); + /** * Implementation which does nothing, used for mocks in unit tests. * @@ -53,5 +61,25 @@ public String invalidNumber(String newValue) { public String upperBoundaryReached(String newInstanceClass, String feature) { return ""; } + + @Override + public String properties() { + return ""; + } + + @Override + public String coreProperties() { + return ""; + } + + @Override + public String general() { + return ""; + } + + @Override + public String shapePreview() { + return ""; + } } } diff --git a/packages/emf/backend/sirius-components-emf/src/main/resources/messages/sirius-web-emf.properties b/packages/emf/backend/sirius-components-emf/src/main/resources/messages/sirius-web-emf.properties index 071856c9289..eb7a1fda497 100644 --- a/packages/emf/backend/sirius-components-emf/src/main/resources/messages/sirius-web-emf.properties +++ b/packages/emf/backend/sirius-components-emf/src/main/resources/messages/sirius-web-emf.properties @@ -1,5 +1,5 @@ ################################################################################ -# Copyright (c) 2019, 2023 Obeo. +# Copyright (c) 2019, 2024 Obeo. # This program and the accompanying materials # are made available under the terms of the Eclipse Public License v2.0 # which accompanies this distribution, and is available at @@ -14,3 +14,7 @@ INVALID_INPUT = Invalid input type, "{0}" has been received while "{1}" was expe UNEXPECTED_ERROR = An unexpected error has occurred, please contact the server administrator INVALID_NUMBER = The new value "{0}" is not a valid number UPPER_BOUNDARY_REACHED = Unable to create a new instance of "{0}" in feature "{1}" because it has reached its upper-bound cardinality. +PROPERTIES = Properties +CORE_PROPERTIES = Core Properties +GENERAL = General +SHAPE_PREVIEW = Shape Preview diff --git a/packages/emf/backend/sirius-components-emf/src/main/resources/messages/sirius-web-emf_ru.properties b/packages/emf/backend/sirius-components-emf/src/main/resources/messages/sirius-web-emf_ru.properties new file mode 100644 index 00000000000..69c03deef85 --- /dev/null +++ b/packages/emf/backend/sirius-components-emf/src/main/resources/messages/sirius-web-emf_ru.properties @@ -0,0 +1,20 @@ +################################################################################ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation +################################################################################# +INVALID_INPUT = \u041D\u0435\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u044B\u0439 \u0442\u0438\u043F, \u0431\u044B\u043B\u043E \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E "{0}", \u0430 \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C "{1}" +UNEXPECTED_ERROR = \u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043D\u0435\u043E\u0436\u0438\u0434\u0430\u043D\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430, \u0441\u0432\u044F\u0436\u0438\u0442\u0435\u0441\u044C, \u043F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0441 \u0430\u0434\u043C\u0438\u043D\u0438\u0441\u0442\u0440\u0430\u0442\u043E\u0440\u043E\u043C +INVALID_NUMBER = \u041D\u043E\u0432\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 "{0}" \u043D\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0447\u0438\u0441\u043B\u043E\u043C +UPPER_BOUNDARY_REACHED = \u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}", \u043F\u043E\u0442\u043E\u043C\u0443 \u0447\u0442\u043E \u0434\u043E\u0441\u0442\u0438\u0433\u043D\u0443\u0442 \u043F\u0440\u0435\u0434\u0435\u043B \u043D\u0430 \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432. +PROPERTIES = \u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430 +CORE_PROPERTIES = \u041E\u0441\u043D\u043E\u0432\u043D\u044B\u0435 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 +GENERAL = \u041E\u0431\u0449\u0438\u0435 +SHAPE_PREVIEW = \u041F\u0440\u0435\u0434\u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0444\u0438\u0433\u0443\u0440\u044B diff --git a/packages/forms/backend/sirius-components-forms-tests/src/main/java/org/eclipse/sirius/components/forms/tests/navigation/FormNavigator.java b/packages/forms/backend/sirius-components-forms-tests/src/main/java/org/eclipse/sirius/components/forms/tests/navigation/FormNavigator.java index 7f3302b2633..6183cb1e4c9 100644 --- a/packages/forms/backend/sirius-components-forms-tests/src/main/java/org/eclipse/sirius/components/forms/tests/navigation/FormNavigator.java +++ b/packages/forms/backend/sirius-components-forms-tests/src/main/java/org/eclipse/sirius/components/forms/tests/navigation/FormNavigator.java @@ -29,6 +29,10 @@ public FormNavigator(Form form) { this.form = Objects.requireNonNull(form); } + public PageNavigator page(int index) { + return new PageNavigator(this.form.getPages().get(index)); + } + public PageNavigator page(String label) { return this.form.getPages().stream() .filter(page -> page.getLabel().equals(label)) diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/DomainPropertiesConfigurer.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/DomainPropertiesConfigurer.java index a0ceb3d9c2c..9448c7247cf 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/DomainPropertiesConfigurer.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/DomainPropertiesConfigurer.java @@ -45,6 +45,7 @@ import org.eclipse.sirius.components.view.form.WidgetDescription; import org.eclipse.sirius.components.view.widget.reference.ReferenceFactory; import org.eclipse.sirius.components.view.widget.reference.ReferenceWidgetDescription; +import org.eclipse.sirius.web.sample.messages.DomainPropertiesMessageService; import org.eclipse.sirius.web.sample.services.DomainAttributeServices; import org.eclipse.sirius.web.services.api.representations.IInMemoryViewRegistry; import org.springframework.context.annotation.Configuration; @@ -65,10 +66,13 @@ public class DomainPropertiesConfigurer implements IPropertiesDescriptionRegistr private final IInMemoryViewRegistry viewRegistry; - public DomainPropertiesConfigurer(ViewFormDescriptionConverter converter, IFeedbackMessageService feedbackMessageService, IInMemoryViewRegistry viewRegistry) { + private final DomainPropertiesMessageService messageService; + + public DomainPropertiesConfigurer(ViewFormDescriptionConverter converter, IFeedbackMessageService feedbackMessageService, IInMemoryViewRegistry viewRegistry, DomainPropertiesMessageService messageService) { this.viewRegistry = Objects.requireNonNull(viewRegistry); this.converter = Objects.requireNonNull(converter); this.feedbackMessageService = Objects.requireNonNull(feedbackMessageService); + this.messageService = Objects.requireNonNull(messageService); } @Override @@ -101,7 +105,7 @@ private FormDescription getAttributeDetails() { FormDescription form = FormFactory.eINSTANCE.createFormDescription(); form.setName("Attribute Details"); form.setDomainType("domain::Attribute"); - form.setTitleExpression("Attribute Details"); + form.setTitleExpression(this.messageService.getMessage("ATTRIBUTE_DETAILS")); PageDescription page = FormFactory.eINSTANCE.createPageDescription(); page.setDomainType("domain::Attribute"); @@ -123,13 +127,13 @@ private GroupDescription createEntityGroup() { GroupDescription group = FormFactory.eINSTANCE.createGroupDescription(); group.setDisplayMode(GroupDisplayMode.LIST); group.setName(CORE_PROPERTIES); - group.setLabelExpression(CORE_PROPERTIES); + group.setLabelExpression(this.messageService.getMessage("CORE_PROPERTIES")); group.setSemanticCandidatesExpression("aql:self"); - group.getChildren().add(this.createStringAttributeEditWidget("Name", DomainPackage.Literals.NAMED_ELEMENT__NAME.getName())); - group.getChildren().add(this.createReferenceWidget("Super Type", DomainPackage.Literals.ENTITY__SUPER_TYPES.getName())); - group.getChildren().add(this.createReferenceWidget("Attributes", DomainPackage.Literals.ENTITY__ATTRIBUTES.getName())); - group.getChildren().add(this.createReferenceWidget("Relations", DomainPackage.Literals.ENTITY__RELATIONS.getName())); - group.getChildren().add(this.createBooleanAttributeEditWidget("Abstract", DomainPackage.Literals.ENTITY__ABSTRACT.getName())); + group.getChildren().add(this.createStringAttributeEditWidget("Name", "NAME", DomainPackage.Literals.NAMED_ELEMENT__NAME.getName())); + group.getChildren().add(this.createReferenceWidget("Super Types", "SUPER_TYPES", DomainPackage.Literals.ENTITY__SUPER_TYPES.getName())); + group.getChildren().add(this.createReferenceWidget("Attributes", "ATTRIBUTES", DomainPackage.Literals.ENTITY__ATTRIBUTES.getName())); + group.getChildren().add(this.createReferenceWidget("Relations", "RELATIONS", DomainPackage.Literals.ENTITY__RELATIONS.getName())); + group.getChildren().add(this.createBooleanAttributeEditWidget("Abstract", "ABSTRACT", DomainPackage.Literals.ENTITY__ABSTRACT.getName())); return group; } @@ -137,20 +141,20 @@ private GroupDescription createGroup() { GroupDescription group = FormFactory.eINSTANCE.createGroupDescription(); group.setDisplayMode(GroupDisplayMode.LIST); group.setName(CORE_PROPERTIES); - group.setLabelExpression(CORE_PROPERTIES); + group.setLabelExpression(this.messageService.getMessage("CORE_PROPERTIES")); group.setSemanticCandidatesExpression("aql:self"); - group.getChildren().add(this.createStringAttributeEditWidget("Name", DomainPackage.Literals.NAMED_ELEMENT__NAME.getName())); + group.getChildren().add(this.createStringAttributeEditWidget("Name", "NAME", DomainPackage.Literals.NAMED_ELEMENT__NAME.getName())); group.getChildren().add(this.createTypeSelectorWidget()); - group.getChildren().add(this.createBooleanAttributeEditWidget("Optional", DomainPackage.Literals.FEATURE__OPTIONAL.getName())); - group.getChildren().add(this.createBooleanAttributeEditWidget("Many", DomainPackage.Literals.FEATURE__MANY.getName())); + group.getChildren().add(this.createBooleanAttributeEditWidget("Optional", "OPTIONAL", DomainPackage.Literals.FEATURE__OPTIONAL.getName())); + group.getChildren().add(this.createBooleanAttributeEditWidget("Many", "MANY", DomainPackage.Literals.FEATURE__MANY.getName())); group.getChildren().add(this.createCardinalityLabel()); return group; } - private WidgetDescription createStringAttributeEditWidget(String title, String attributeName) { + private WidgetDescription createStringAttributeEditWidget(String name, String label, String attributeName) { TextfieldDescription textfield = FormFactory.eINSTANCE.createTextfieldDescription(); - textfield.setName(title); - textfield.setLabelExpression(title); + textfield.setName(name); + textfield.setLabelExpression(this.messageService.getMessage(label)); textfield.setValueExpression("aql:self.%s".formatted(attributeName)); SetValue setValueOperation = ViewFactory.eINSTANCE.createSetValue(); setValueOperation.setFeatureName(attributeName); @@ -159,10 +163,10 @@ private WidgetDescription createStringAttributeEditWidget(String title, String a return textfield; } - private WidgetDescription createBooleanAttributeEditWidget(String title, String attributeName) { + private WidgetDescription createBooleanAttributeEditWidget(String name, String label, String attributeName) { CheckboxDescription checkbox = FormFactory.eINSTANCE.createCheckboxDescription(); - checkbox.setName(title); - checkbox.setLabelExpression(title); + checkbox.setName(name); + checkbox.setLabelExpression(this.messageService.getMessage(label)); checkbox.setValueExpression("aql:self.%s".formatted(attributeName)); SetValue setValueOperation = ViewFactory.eINSTANCE.createSetValue(); setValueOperation.setFeatureName(attributeName); @@ -174,7 +178,7 @@ private WidgetDescription createBooleanAttributeEditWidget(String title, String private WidgetDescription createTypeSelectorWidget() { SelectDescription selectWidget = FormFactory.eINSTANCE.createSelectDescription(); selectWidget.setName("Type"); - selectWidget.setLabelExpression("Type"); + selectWidget.setLabelExpression(this.messageService.getMessage("TYPE")); selectWidget.setCandidatesExpression("aql:self.getAvailableDataTypes()"); selectWidget.setValueExpression("aql:self.getDataType()"); selectWidget.setCandidateLabelExpression("aql:candidate.capitalize()"); @@ -184,10 +188,10 @@ private WidgetDescription createTypeSelectorWidget() { return selectWidget; } - private WidgetDescription createReferenceWidget(String name, String referenceName) { + private WidgetDescription createReferenceWidget(String name, String label, String referenceName) { ReferenceWidgetDescription refWidget = ReferenceFactory.eINSTANCE.createReferenceWidgetDescription(); refWidget.setName(name); - refWidget.setLabelExpression(name); + refWidget.setLabelExpression(this.messageService.getMessage(label)); refWidget.setReferenceNameExpression(referenceName); return refWidget; } @@ -195,7 +199,7 @@ private WidgetDescription createReferenceWidget(String name, String referenceNam private WidgetDescription createCardinalityLabel() { LabelDescription cardinalityLabel = FormFactory.eINSTANCE.createLabelDescription(); cardinalityLabel.setName("Cardinality"); - cardinalityLabel.setLabelExpression("Cardinality"); + cardinalityLabel.setLabelExpression(this.messageService.getMessage("CARDINALITY")); cardinalityLabel.setValueExpression("aql:(if self.optional then '0' else '1' endif) + '..' + (if self.many then '*' else '1' endif)"); return cardinalityLabel; } diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/MultipleDomainPropertiesConfigurer.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/MultipleDomainPropertiesConfigurer.java index 68a765d278b..de87007591a 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/MultipleDomainPropertiesConfigurer.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/MultipleDomainPropertiesConfigurer.java @@ -37,6 +37,7 @@ import org.eclipse.sirius.components.view.form.PageDescription; import org.eclipse.sirius.components.view.form.SelectDescription; import org.eclipse.sirius.components.view.form.WidgetDescription; +import org.eclipse.sirius.web.sample.messages.DomainPropertiesMessageService; import org.eclipse.sirius.web.sample.services.DomainAttributeServices; import org.springframework.context.annotation.Configuration; @@ -50,8 +51,11 @@ public class MultipleDomainPropertiesConfigurer implements IPropertiesDescriptio private final ViewFormDescriptionConverter converter; - public MultipleDomainPropertiesConfigurer(ViewFormDescriptionConverter converter) { + private final DomainPropertiesMessageService messageService; + + public MultipleDomainPropertiesConfigurer(ViewFormDescriptionConverter converter, DomainPropertiesMessageService messageService) { this.converter = Objects.requireNonNull(converter); + this.messageService = Objects.requireNonNull(messageService); } @Override @@ -78,13 +82,13 @@ private FormDescription getAttributeDetails() { FormDescription form = FormFactory.eINSTANCE.createFormDescription(); form.setName("Attribute Details"); form.setDomainType("domain::Attribute"); - form.setTitleExpression("Attribute Details"); + form.setTitleExpression(this.messageService.getMessage("ATTRIBUTE_DETAILS")); PageDescription page = FormFactory.eINSTANCE.createPageDescription(); page.setSemanticCandidatesExpression("aql:self"); page.setDomainType("domain::Attribute"); page.setPreconditionExpression("aql:selection->filter(domain::Attribute)->size()>1"); - page.setLabelExpression("MultiSelection"); + page.setLabelExpression(this.messageService.getMessage("MULTI_SELECTION")); form.getPages().add(page); page.getGroups().add(this.createGroup()); return form; @@ -94,19 +98,19 @@ private GroupDescription createGroup() { GroupDescription group = FormFactory.eINSTANCE.createGroupDescription(); group.setDisplayMode(GroupDisplayMode.LIST); group.setName("Core Properties"); - group.setLabelExpression("Core Properties"); + group.setLabelExpression(this.messageService.getMessage("CORE_PROPERTIES")); group.setSemanticCandidatesExpression("aql:self"); group.getChildren().add(this.createTypeSelectorWidget()); - group.getChildren().add(this.createBooleanAttributeEditWidget("Optional", DomainPackage.Literals.FEATURE__OPTIONAL.getName())); - group.getChildren().add(this.createBooleanAttributeEditWidget("Many", DomainPackage.Literals.FEATURE__MANY.getName())); + group.getChildren().add(this.createBooleanAttributeEditWidget("Optional", "OPTIONAL", DomainPackage.Literals.FEATURE__OPTIONAL.getName())); + group.getChildren().add(this.createBooleanAttributeEditWidget("Many", "MANY", DomainPackage.Literals.FEATURE__MANY.getName())); return group; } - private WidgetDescription createBooleanAttributeEditWidget(String title, String attributeName) { + private WidgetDescription createBooleanAttributeEditWidget(String name, String label, String attributeName) { CheckboxDescription checkbox = FormFactory.eINSTANCE.createCheckboxDescription(); - checkbox.setName(title); - checkbox.setLabelExpression(title); + checkbox.setName(name); + checkbox.setLabelExpression(this.messageService.getMessage(label)); checkbox.setValueExpression("aql:self.%s".formatted(attributeName)); ChangeContext changeContext = ViewFactory.eINSTANCE.createChangeContext(); changeContext.setExpression("aql:selection->filter(domain::Attribute).setValue('%s',newValue)".formatted(attributeName)); @@ -117,7 +121,7 @@ private WidgetDescription createBooleanAttributeEditWidget(String title, String private WidgetDescription createTypeSelectorWidget() { SelectDescription selectWidget = FormFactory.eINSTANCE.createSelectDescription(); selectWidget.setName("Type"); - selectWidget.setLabelExpression("Type"); + selectWidget.setLabelExpression(this.messageService.getMessage("TYPE")); selectWidget.setCandidatesExpression("aql:self.getAvailableDataTypes()"); selectWidget.setValueExpression("aql:self.getDataType()"); selectWidget.setCandidateLabelExpression("aql:candidate.capitalize()"); diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/messages/DomainPropertiesMessageService.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/messages/DomainPropertiesMessageService.java new file mode 100644 index 00000000000..28d3e5a3b24 --- /dev/null +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/messages/DomainPropertiesMessageService.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2024 Obeo. + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.sirius.web.sample.messages; + +import org.springframework.context.support.MessageSourceAccessor; +import org.springframework.context.support.ResourceBundleMessageSource; +import org.springframework.stereotype.Service; + +/** + * The message service for a domain property form. + * + * @author aresekb + */ +@Service +public class DomainPropertiesMessageService { + + private static final String MESSAGES_PATH = "messages/sirius-web-sample-application-domain"; + + private final MessageSourceAccessor messageSourceAccessor; + + public DomainPropertiesMessageService() { + ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); + messageSource.addBasenames(MESSAGES_PATH); + this.messageSourceAccessor = new MessageSourceAccessor(messageSource); + } + + public String getMessage(String code) { + return this.messageSourceAccessor.getMessage(code); + } + +} diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/services/DomainAttributeServices.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/services/DomainAttributeServices.java index a2be4a11bb1..009701bc462 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/services/DomainAttributeServices.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/services/DomainAttributeServices.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Obeo. + * Copyright (c) 2023, 2024 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -20,6 +20,7 @@ import org.eclipse.sirius.components.core.api.IFeedbackMessageService; import org.eclipse.sirius.components.domain.Attribute; import org.eclipse.sirius.components.domain.DataType; +import org.eclipse.sirius.components.domain.provider.DomainEditPlugin; import org.eclipse.sirius.components.representations.Message; import org.eclipse.sirius.components.representations.MessageLevel; import org.eclipse.sirius.components.view.form.FormDescription; @@ -38,11 +39,15 @@ public DomainAttributeServices(IFeedbackMessageService feedbackMessageService) { } public List getAvailableDataTypes(EObject self) { - return DataType.VALUES.stream().map(DataType::getName).toList(); + return DataType.VALUES.stream().map(this::getDataTypeLabel).toList(); } public String getDataType(Attribute attr) { - return Optional.ofNullable(attr.getType()).map(DataType::getName).orElse(null); + return Optional.ofNullable(attr.getType()).map(this::getDataTypeLabel).orElse(null); + } + + private String getDataTypeLabel(DataType dataType) { + return DomainEditPlugin.INSTANCE.getString("_UI_DataType_" + dataType.getName() + "_literal"); } public EObject setDataType(Attribute attr, String typeName) { diff --git a/packages/view/backend/sirius-components-view-emf/src/main/resources/messages/sirius-web-emf.properties b/packages/sirius-web/backend/sirius-web-sample-application/src/main/resources/messages/sirius-web-sample-application-domain.properties similarity index 64% rename from packages/view/backend/sirius-components-view-emf/src/main/resources/messages/sirius-web-emf.properties rename to packages/sirius-web/backend/sirius-web-sample-application/src/main/resources/messages/sirius-web-sample-application-domain.properties index e0baf6110fc..f0466439dd5 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/resources/messages/sirius-web-emf.properties +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/resources/messages/sirius-web-sample-application-domain.properties @@ -1,5 +1,5 @@ ################################################################################################ -# Copyright (c) 2019, 2021 Obeo. +# Copyright (c) 2024 Obeo. # This program and the accompanying materials # are made available under the terms of the Eclipse Public License v2.0 # which accompanies this distribution, and is available at @@ -10,6 +10,15 @@ # Contributors: # Obeo - initial API and implementation ################################################################################################ -INVALID_INPUT=Invalid input type, "{0}" has been received while "{1}" was expected -UNEXPECTED_ERROR=An unexpected error has occurred, please contact the server administrator -INVALID_NUMBER=The new value "{0}" is not a valid number +ABSTRACT=Abstract +ATTRIBUTE_DETAILS=Attribute Details +ATTRIBUTES=Attributes +CARDINALITY=Cardinality +CORE_PROPERTIES=Core Properties +MANY=Many +MULTI_SELECTION=MultiSelection +NAME=Name +OPTIONAL=Optional +RELATIONS=Relations +SUPER_TYPES=Super Types +TYPE=Type diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/resources/messages/sirius-web-sample-application-domain_ru.properties b/packages/sirius-web/backend/sirius-web-sample-application/src/main/resources/messages/sirius-web-sample-application-domain_ru.properties new file mode 100644 index 00000000000..99fcdaa4583 --- /dev/null +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/resources/messages/sirius-web-sample-application-domain_ru.properties @@ -0,0 +1,24 @@ +################################################################################################ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation +################################################################################################ +ABSTRACT=\u0410\u0431\u0441\u0442\u0440\u0430\u043A\u0442\u043D\u044B\u0439 +ATTRIBUTE_DETAILS=\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 +ATTRIBUTES=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044B +CARDINALITY=\u041C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0441\u0442\u044C +CORE_PROPERTIES=\u041E\u0441\u043D\u043E\u0432\u043D\u044B\u0435 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 +MANY=\u041C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 +MULTI_SELECTION=\u041C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 \u0432\u044B\u0431\u043E\u0440 +NAME=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +OPTIONAL=\u041D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 +RELATIONS=\u041E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u044F +SUPER_TYPES=\u0420\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u0442\u0438\u043F\u044B +TYPE=\u0422\u0438\u043F diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/formdescritpioneditors/FormDescriptionEditorPageIntegrationTests.java b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/formdescritpioneditors/FormDescriptionEditorPageIntegrationTests.java index f3066a0d0a8..ba65bc8754c 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/formdescritpioneditors/FormDescriptionEditorPageIntegrationTests.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/formdescritpioneditors/FormDescriptionEditorPageIntegrationTests.java @@ -252,7 +252,7 @@ mutation createChild($input: CreateChildInput!) { } """; - var createChildInput = new CreateChildInput(UUID.randomUUID(), this.projectId.toString(), this.rootObjectId.toString(), "Form Description"); + var createChildInput = new CreateChildInput(UUID.randomUUID(), this.projectId.toString(), this.rootObjectId.toString(), "descriptions-FormDescription"); var createChildExecutionInput = ExecutionInput.newExecutionInput() .query(createChildQuery) diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/messages/IServicesMessageService.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/messages/IServicesMessageService.java index bcb587cc3ed..93b8f396357 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/messages/IServicesMessageService.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/messages/IServicesMessageService.java @@ -48,4 +48,16 @@ public interface IServicesMessageService { String stereotypeNotFound(UUID stereotypeId); String unpinSelectedElements(); + + String representations(); + + String incoming(); + + String current(); + + String outgoing(); + + String parent(); + + String children(); } diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/messages/ServicesMessageService.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/messages/ServicesMessageService.java index de05549e1eb..cd7476a7394 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/messages/ServicesMessageService.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/messages/ServicesMessageService.java @@ -102,4 +102,34 @@ public String stereotypeNotFound(UUID stereotypeId) { public String unpinSelectedElements() { return this.messageSourceAccessor.getMessage("UNPIN_SELECTED_ELEMENTS"); } + + @Override + public String representations() { + return this.messageSourceAccessor.getMessage("REPRESENTATIONS"); + } + + @Override + public String incoming() { + return this.messageSourceAccessor.getMessage("INCOMING"); + } + + @Override + public String current() { + return this.messageSourceAccessor.getMessage("CURRENT"); + } + + @Override + public String outgoing() { + return this.messageSourceAccessor.getMessage("OUTGOING"); + } + + @Override + public String parent() { + return this.messageSourceAccessor.getMessage("PARENT"); + } + + @Override + public String children() { + return this.messageSourceAccessor.getMessage("CHILDREN"); + } } diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/CurrentTreeProvider.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/CurrentTreeProvider.java index 1ed96d95ceb..e6a0c47e84b 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/CurrentTreeProvider.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/CurrentTreeProvider.java @@ -36,6 +36,7 @@ import org.eclipse.sirius.components.forms.description.TreeDescription; import org.eclipse.sirius.components.representations.Success; import org.eclipse.sirius.components.representations.VariableManager; +import org.eclipse.sirius.web.services.messages.IServicesMessageService; /** * Provides the definition of the tree widget for the "Current" panel in the "Related Elements" view. It displays two @@ -55,12 +56,6 @@ public class CurrentTreeProvider { private static final String WIDGET_ID = "related/current"; - private static final String CATEGORY_PARENT = "Parent"; - - private static final String CATEGORY_CHILDREN = "Children"; - - private static final String TITLE = "Current"; - private static final String WIDGET_ICON_URL = "/images/arrow_downward_black_24dp.svg"; private static final String FOLDER_ICON_URL = "/images/folder_black_24dp.svg"; @@ -73,12 +68,15 @@ public class CurrentTreeProvider { private final IObjectService objectService; + private final IServicesMessageService messageService; + private final AdapterFactory adapterFactory; private final IPropertiesValidationProvider propertiesValidationProvider = new IPropertiesValidationProvider.NoOp(); - public CurrentTreeProvider(IObjectService objectService, AdapterFactory adapterFactory) { + public CurrentTreeProvider(IObjectService objectService, IServicesMessageService messageService, AdapterFactory adapterFactory) { this.objectService = Objects.requireNonNull(objectService); + this.messageService = Objects.requireNonNull(messageService); this.adapterFactory = Objects.requireNonNull(adapterFactory); } @@ -90,7 +88,7 @@ public TreeDescription getTreeDescription() { .diagnosticsProvider(this.propertiesValidationProvider.getDiagnosticsProvider()) .kindProvider(this.propertiesValidationProvider.getKindProvider()) .messageProvider(this.propertiesValidationProvider.getMessageProvider()) - .labelProvider(variableManager -> TITLE) + .labelProvider(variableManager -> this.messageService.current()) .iconURLProvider(variableManager -> List.of(WIDGET_ICON_URL)) .nodeIdProvider(this::getNodeId) .nodeLabelProvider(this::getNodeLabel) @@ -121,10 +119,10 @@ private List getCurrentChildren(VariableManager variableManager) { private List getCurrentChildren(Object self, EObject root, List ancestors) { List result = List.of(); if (ancestors.isEmpty()) { - result = List.of(CATEGORY_PARENT, CATEGORY_CHILDREN); - } else if (self.equals(CATEGORY_PARENT) && root.eContainer() != null) { + result = List.of(this.messageService.parent(), this.messageService.children()); + } else if (self.equals(this.messageService.parent()) && root.eContainer() != null) { result = List.of(root.eContainer()); - } else if (self.equals(CATEGORY_CHILDREN)) { + } else if (self.equals(this.messageService.children())) { result = this.getNonEmptyContainmentReferences(root); } else if (self instanceof EReference) { result = this.readReference(root, (EReference) self); diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/DefaultRelatedElementsDescriptionProvider.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/DefaultRelatedElementsDescriptionProvider.java index 362e1bf1dfc..b519b8d5744 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/DefaultRelatedElementsDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/DefaultRelatedElementsDescriptionProvider.java @@ -30,6 +30,7 @@ import org.eclipse.sirius.components.forms.description.GroupDescription; import org.eclipse.sirius.components.forms.description.PageDescription; import org.eclipse.sirius.components.representations.VariableManager; +import org.eclipse.sirius.web.services.messages.IServicesMessageService; import org.springframework.stereotype.Service; /** @@ -51,10 +52,13 @@ public class DefaultRelatedElementsDescriptionProvider implements IRelatedElemen private final IObjectService objectService; + private final IServicesMessageService messageService; + private final AdapterFactory adapterFactory; - public DefaultRelatedElementsDescriptionProvider(IObjectService objectService, ComposedAdapterFactory adapterFactory) { + public DefaultRelatedElementsDescriptionProvider(IObjectService objectService, IServicesMessageService messageService, ComposedAdapterFactory adapterFactory) { this.objectService = Objects.requireNonNull(objectService); + this.messageService = Objects.requireNonNull(messageService); this.adapterFactory = Objects.requireNonNull(adapterFactory); } @@ -89,9 +93,9 @@ private String getFormId(VariableManager variableManager) { private GroupDescription getGroupDescription() { List controlDescriptions = new ArrayList<>(); - controlDescriptions.add(new IncomingTreeProvider(this.objectService, this.adapterFactory).getTreeDescription()); - controlDescriptions.add(new CurrentTreeProvider(this.objectService, this.adapterFactory).getTreeDescription()); - controlDescriptions.add(new OutgoingTreeProvider(this.objectService, this.adapterFactory).getTreeDescription()); + controlDescriptions.add(new IncomingTreeProvider(this.objectService, this.messageService, this.adapterFactory).getTreeDescription()); + controlDescriptions.add(new CurrentTreeProvider(this.objectService, this.messageService, this.adapterFactory).getTreeDescription()); + controlDescriptions.add(new OutgoingTreeProvider(this.objectService, this.messageService, this.adapterFactory).getTreeDescription()); // @formatter:off return GroupDescription.newGroupDescription(GROUP_DESCRIPTION_ID) diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/IncomingTreeProvider.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/IncomingTreeProvider.java index d4f7722d1a9..6528549b62a 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/IncomingTreeProvider.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/IncomingTreeProvider.java @@ -39,6 +39,7 @@ import org.eclipse.sirius.components.forms.description.TreeDescription; import org.eclipse.sirius.components.representations.Success; import org.eclipse.sirius.components.representations.VariableManager; +import org.eclipse.sirius.web.services.messages.IServicesMessageService; /** * Provides the definition of the tree widget for the "Incoming" panel in the "Related Elements" view. @@ -49,8 +50,6 @@ public class IncomingTreeProvider { private static final String WIDGET_ID = "related/incoming"; - private static final String TITLE = "Incoming"; - private static final String WIDGET_ICON_URL = "/images/west_black_24dp.svg"; private static final String INCOMING_REFERENCE_ICON_URL = "/images/west_black_24dp.svg"; @@ -59,12 +58,15 @@ public class IncomingTreeProvider { private final IObjectService objectService; + private final IServicesMessageService messageService; + private final AdapterFactory adapterFactory; private final IPropertiesValidationProvider propertiesValidationProvider = new IPropertiesValidationProvider.NoOp(); - public IncomingTreeProvider(IObjectService objectService, AdapterFactory adapterFactory) { + public IncomingTreeProvider(IObjectService objectService, IServicesMessageService messageService, AdapterFactory adapterFactory) { this.objectService = Objects.requireNonNull(objectService); + this.messageService = Objects.requireNonNull(messageService); this.adapterFactory = Objects.requireNonNull(adapterFactory); } @@ -76,7 +78,7 @@ public TreeDescription getTreeDescription() { .diagnosticsProvider(this.propertiesValidationProvider.getDiagnosticsProvider()) .kindProvider(this.propertiesValidationProvider.getKindProvider()) .messageProvider(this.propertiesValidationProvider.getMessageProvider()) - .labelProvider(variableManager -> TITLE) + .labelProvider(variableManager -> this.messageService.incoming()) .iconURLProvider(variableManager -> List.of(WIDGET_ICON_URL)) .nodeIdProvider(this::getNodeId) .nodeLabelProvider(this::getNodeLabel) diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/OutgoingTreeProvider.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/OutgoingTreeProvider.java index 847bda0436b..c41d5ced07f 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/OutgoingTreeProvider.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/OutgoingTreeProvider.java @@ -35,6 +35,7 @@ import org.eclipse.sirius.components.forms.description.TreeDescription; import org.eclipse.sirius.components.representations.Success; import org.eclipse.sirius.components.representations.VariableManager; +import org.eclipse.sirius.web.services.messages.IServicesMessageService; /** * Provides the definition of the tree widget for the "Outgoing" panel in the "Related Elements" view. It has two @@ -52,8 +53,6 @@ public class OutgoingTreeProvider { private static final String WIDGET_ID = "related/outgoing"; - private static final String TITLE = "Outgoing"; - private static final String WIDGET_ICON_URL = "/images/east_black_24dp.svg"; private static final String OUTGOING_REFERENCE_ICON_URL = "/images/east_black_24dp.svg"; @@ -62,12 +61,15 @@ public class OutgoingTreeProvider { private final IObjectService objectService; + private final IServicesMessageService messageService; + private final AdapterFactory adapterFactory; private final IPropertiesValidationProvider propertiesValidationProvider = new IPropertiesValidationProvider.NoOp(); - public OutgoingTreeProvider(IObjectService objectService, AdapterFactory adapterFactory) { + public OutgoingTreeProvider(IObjectService objectService, IServicesMessageService messageService, AdapterFactory adapterFactory) { this.objectService = Objects.requireNonNull(objectService); + this.messageService = Objects.requireNonNull(messageService); this.adapterFactory = Objects.requireNonNull(adapterFactory); } @@ -79,7 +81,7 @@ public TreeDescription getTreeDescription() { .diagnosticsProvider(this.propertiesValidationProvider.getDiagnosticsProvider()) .kindProvider(this.propertiesValidationProvider.getKindProvider()) .messageProvider(this.propertiesValidationProvider.getMessageProvider()) - .labelProvider(variableManager -> TITLE) + .labelProvider(variableManager -> this.messageService.outgoing()) .iconURLProvider(variableManager -> List.of(WIDGET_ICON_URL)) .nodeIdProvider(this::getNodeId) .nodeLabelProvider(this::getNodeLabel) diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationsDescriptionProvider.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationsDescriptionProvider.java index f5c698b5a72..e1c22b2403f 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationsDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationsDescriptionProvider.java @@ -53,6 +53,7 @@ import org.eclipse.sirius.components.representations.Success; import org.eclipse.sirius.components.representations.VariableManager; import org.eclipse.sirius.web.services.api.representations.IRepresentationService; +import org.eclipse.sirius.web.services.messages.IServicesMessageService; import org.springframework.stereotype.Service; /** @@ -63,8 +64,6 @@ @Service public class RepresentationsDescriptionProvider implements IRepresentationsDescriptionProvider { - public static final String TITLE = "Representations"; - public static final String PREFIX = "representations://"; public static final String REPRESENTATIONS_DEFAULT_FORM_DESCRIPTION_ID = "representations_default_form_description"; @@ -75,15 +74,18 @@ public class RepresentationsDescriptionProvider implements IRepresentationsDescr private final IRepresentationSearchService representationSearchService; + private final IServicesMessageService servicesMessageService; + private final List representationImageProviders; private final Function semanticTargetIdProvider; public RepresentationsDescriptionProvider(IObjectService objectService, IRepresentationService representationService, IRepresentationSearchService representationSearchService, - List representationImageProviders) { + IServicesMessageService servicesMessageService, List representationImageProviders) { this.objectService = Objects.requireNonNull(objectService); this.representationService = Objects.requireNonNull(representationService); this.representationSearchService = Objects.requireNonNull(representationSearchService); + this.servicesMessageService = Objects.requireNonNull(servicesMessageService); this.representationImageProviders = Objects.requireNonNull(representationImageProviders); this.semanticTargetIdProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class).map(this.objectService::getId).orElse(null); } @@ -101,7 +103,7 @@ public FormDescription getRepresentationsDescription() { Function labelProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class) .map(this.objectService::getFullLabel) - .orElse(TITLE); + .orElse(this.servicesMessageService.representations()); return FormDescription.newFormDescription(UUID.nameUUIDFromBytes(REPRESENTATIONS_DEFAULT_FORM_DESCRIPTION_ID.getBytes()).toString()) .label("Representations default form description") @@ -137,7 +139,7 @@ private GroupDescription getGroupDescription() { ListDescription listDescription = ListDescription.newListDescription("RepresentationsList") .idProvider(new WidgetIdProvider()) - .labelProvider(variableManager -> TITLE) + .labelProvider(variableManager -> this.servicesMessageService.representations()) .itemsProvider(this.getItemsProvider()) .itemIdProvider(this.getItemIdProvider()) .itemLabelProvider(this.getItemLabelProvider()) diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationsMetadataProvider.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationsMetadataProvider.java index dabcc9edb5d..ade28b391fb 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationsMetadataProvider.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationsMetadataProvider.java @@ -12,23 +12,33 @@ *******************************************************************************/ package org.eclipse.sirius.web.services.representations; +import java.util.Objects; import java.util.Optional; import org.eclipse.sirius.components.core.RepresentationMetadata; import org.eclipse.sirius.components.core.api.IRepresentationMetadataProvider; import org.eclipse.sirius.components.forms.Form; +import org.eclipse.sirius.web.services.messages.IServicesMessageService; +import org.springframework.stereotype.Service; /** * Provides the metadata for the "Representations" representation. * * @author pcdavid */ +@Service public class RepresentationsMetadataProvider implements IRepresentationMetadataProvider { + private final IServicesMessageService servicesMessageService; + + public RepresentationsMetadataProvider(IServicesMessageService servicesMessageService) { + this.servicesMessageService = Objects.requireNonNull(servicesMessageService); + } + @Override public Optional getMetadata(String representationId) { if (representationId.startsWith(RepresentationsDescriptionProvider.PREFIX)) { - return Optional.of(new RepresentationMetadata(representationId, Form.KIND, RepresentationsDescriptionProvider.TITLE, RepresentationsDescriptionProvider.REPRESENTATIONS_DEFAULT_FORM_DESCRIPTION_ID)); + return Optional.of(new RepresentationMetadata(representationId, Form.KIND, servicesMessageService.representations(), RepresentationsDescriptionProvider.REPRESENTATIONS_DEFAULT_FORM_DESCRIPTION_ID)); } return Optional.empty(); } diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/resources/messages/sirius-web-services.properties b/packages/sirius-web/backend/sirius-web-services/src/main/resources/messages/sirius-web-services.properties index 5a9ac2d64ff..3c805b2a58e 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/resources/messages/sirius-web-services.properties +++ b/packages/sirius-web/backend/sirius-web-services/src/main/resources/messages/sirius-web-services.properties @@ -23,4 +23,10 @@ SHOW_SELECTED_ELEMENTS=Show selected elements UNEXPECTED_ERROR=An unexpected error has occurred, please contact the server administrator INVALID_DOCUMENT_NAME=You cannot create a model with the name "{0}". Please use a valid name (no spaces, at least one character) for the new model STEREOTYPE_NOT_FOUND=The model type with id "{0}" does not exist, therefore you cannot create a model from it -UNPIN_SELECTED_ELEMENTS=Unpin selected elements \ No newline at end of file +UNPIN_SELECTED_ELEMENTS=Unpin selected elements +REPRESENTATIONS=Representations +INCOMING=Incoming +CURRENT=Current +OUTGOING=Outgoing +PARENT=Parent +CHILDREN=Children diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/resources/messages/sirius-web-services_ru.properties b/packages/sirius-web/backend/sirius-web-services/src/main/resources/messages/sirius-web-services_ru.properties new file mode 100644 index 00000000000..2cb1a62497e --- /dev/null +++ b/packages/sirius-web/backend/sirius-web-services/src/main/resources/messages/sirius-web-services_ru.properties @@ -0,0 +1,24 @@ +################################################################################################ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation +################################################################################################ +INVALID_INPUT=\u041D\u0435\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u044B\u0439 \u0442\u0438\u043F, \u0431\u044B\u043B\u043E \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E "{0}", \u0430 \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C "{1}" +INVALID_PROJECT_NAME=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0434\u043E\u043B\u0436\u043D\u043E \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C \u043E\u0442 3 \u0434\u043E 20 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 +PROJECT_NOT_FOUND=\u041F\u0440\u043E\u0435\u043A\u0442 \u043D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 +UNEXPECTED_ERROR=\u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043D\u0435\u043E\u0436\u0438\u0434\u0430\u043D\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430, \u0441\u0432\u044F\u0436\u0438\u0442\u0435\u0441\u044C, \u043F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0441 \u0430\u0434\u043C\u0438\u043D\u0438\u0441\u0442\u0440\u0430\u0442\u043E\u0440\u043E\u043C +INVALID_DOCUMENT_NAME=\u0412\u044B \u043D\u0435 \u043C\u043E\u0436\u0435\u0442\u0435 \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043C\u043E\u0434\u0435\u043B\u044C \u0441 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435\u043C "{0}". \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 (\u0431\u0435\u0437 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u0432, \u0445\u043E\u0442\u044F \u0431\u044B \u043E\u0434\u0438\u043D \u0441\u0438\u043C\u0432\u043E\u043B) \u0434\u043B\u044F \u043D\u043E\u0432\u043E\u0439 \u043C\u043E\u0434\u0435\u043B\u0438 +STEREOTYPE_NOT_FOUND=\u0422\u0438\u043F \u043C\u043E\u0434\u0435\u043B\u0435\u0439 \u0441 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u043E\u043C "{0}" \u043D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0432\u044B \u043D\u0435 \u043C\u043E\u0436\u0435\u0442\u0435 \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043C\u043E\u0434\u0435\u043B\u044C \u043D\u0430 \u0435\u0433\u043E \u043E\u0441\u043D\u043E\u0432\u0435 +REPRESENTATIONS=\u041F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044F +INCOMING=\u0412\u0445\u043E\u0434\u044F\u0449\u0438\u0435 +CURRENT=\u0422\u0435\u043A\u0443\u0449\u0438\u0435 +OUTGOING=\u0418\u0441\u0445\u043E\u0434\u044F\u0449\u0438\u0435 +PARENT=\u0420\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u043E\u0431\u044A\u0435\u043A\u0442 +CHILDREN=\u0414\u043E\u0447\u0435\u0440\u043D\u0438\u0435 \u043E\u0431\u044A\u0435\u043A\u0442\u044B diff --git a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/projects/NoOpServicesMessageService.java b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/projects/NoOpServicesMessageService.java index 3efe4c88119..1fc34f67a38 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/projects/NoOpServicesMessageService.java +++ b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/projects/NoOpServicesMessageService.java @@ -93,4 +93,34 @@ public String unpinSelectedElements() { return ""; } + @Override + public String representations() { + return ""; + } + + @Override + public String incoming() { + return ""; + } + + @Override + public String current() { + return ""; + } + + @Override + public String outgoing() { + return ""; + } + + @Override + public String parent() { + return ""; + } + + @Override + public String children() { + return ""; + } + } diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/forms/CustomNodeDetailsViewControllerTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/forms/CustomNodeDetailsViewControllerTests.java index 78a8c7e2d88..9154bc612bc 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/forms/CustomNodeDetailsViewControllerTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/forms/CustomNodeDetailsViewControllerTests.java @@ -29,12 +29,14 @@ import org.eclipse.sirius.components.collaborative.forms.dto.FormRefreshedEventPayload; import org.eclipse.sirius.components.collaborative.forms.dto.PropertiesEventInput; import org.eclipse.sirius.components.core.api.SuccessPayload; +import org.eclipse.sirius.components.emf.services.messages.IEMFMessageService; import org.eclipse.sirius.components.forms.Form; import org.eclipse.sirius.components.forms.Textfield; import org.eclipse.sirius.components.forms.tests.assertions.FormAssertions; import org.eclipse.sirius.components.forms.tests.graphql.EditTextfieldMutationRunner; import org.eclipse.sirius.components.forms.tests.graphql.PropertiesEventSubscriptionRunner; import org.eclipse.sirius.components.forms.tests.navigation.FormNavigator; +import org.eclipse.sirius.components.view.diagram.provider.DiagramEditPlugin; import org.eclipse.sirius.web.AbstractIntegrationTests; import org.eclipse.sirius.web.data.StudioIdentifiers; import org.eclipse.sirius.web.tests.services.api.IGivenInitialServerState; @@ -70,6 +72,9 @@ public class CustomNodeDetailsViewControllerTests extends AbstractIntegrationTes @Autowired private EditTextfieldMutationRunner editTextfieldMutationRunner; + @Autowired + private IEMFMessageService emfMessageService; + @BeforeEach public void beforeEach() { this.givenInitialServerState.initialize(); @@ -84,9 +89,9 @@ public void givenEllipseNodeStyleDescriptionWhenWeSubscribeToItsPropertiesEvents var flux = this.propertiesEventSubscriptionRunner.run(input); Predicate
formPredicate = form -> { - var groupNavigator = new FormNavigator(form).page("").group("Core Properties"); + var groupNavigator = new FormNavigator(form).page(0).group(this.emfMessageService.coreProperties()); - var borderSizeTextField = groupNavigator.findWidget("Border Size", Textfield.class); + var borderSizeTextField = groupNavigator.findWidget(DiagramEditPlugin.INSTANCE.getString("_UI_BorderStyle_borderSize_feature"), Textfield.class); FormAssertions.assertThat(borderSizeTextField) .hasValue("1"); @@ -130,8 +135,8 @@ public void givenEllipseNodeStyleDescriptionWhenBorderSizeIsEditedThenItsValueIs .ifPresentOrElse(form -> { formId.set(form.getId()); - var groupNavigator = new FormNavigator(form).page("").group("Core Properties"); - var textfield = groupNavigator.findWidget("Border Size", Textfield.class); + var groupNavigator = new FormNavigator(form).page(0).group(this.emfMessageService.coreProperties()); + var textfield = groupNavigator.findWidget(DiagramEditPlugin.INSTANCE.getString("_UI_BorderStyle_borderSize_feature"), Textfield.class); textfieldId.set(textfield.getId()); }, () -> fail("Missing form")); @@ -147,8 +152,8 @@ public void givenEllipseNodeStyleDescriptionWhenBorderSizeIsEditedThenItsValueIs Consumer updatedFormContentConsumer = payload -> Optional.of(payload) .map(FormRefreshedEventPayload::form) .ifPresentOrElse(form -> { - var groupNavigator = new FormNavigator(form).page("").group("Core Properties"); - var textfield = groupNavigator.findWidget("Border Size", Textfield.class); + var groupNavigator = new FormNavigator(form).page(0).group(this.emfMessageService.coreProperties()); + var textfield = groupNavigator.findWidget(DiagramEditPlugin.INSTANCE.getString("_UI_BorderStyle_borderSize_feature"), Textfield.class); FormAssertions.assertThat(textfield) .hasValue("3"); diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/objects/ObjectCreationControllerIntegrationTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/objects/ObjectCreationControllerIntegrationTests.java index c036ce6f7e9..4da4ea6a47a 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/objects/ObjectCreationControllerIntegrationTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/objects/ObjectCreationControllerIntegrationTests.java @@ -137,7 +137,7 @@ public void givenAnObjectWhenChildObjectCreationDescriptionsAreRequestedThenVali List creationDescriptionIds = JsonPath.read(result, "$.data.viewer.editingContext.childCreationDescriptions[*].id"); assertThat(creationDescriptionIds) .isNotEmpty() - .contains("Humans Human"); + .contains("humans-Human"); List> creationDescriptionIconURLs = JsonPath.read(result, "$.data.viewer.editingContext.childCreationDescriptions[*].iconURL"); assertThat(creationDescriptionIconURLs).hasSize(1); @@ -184,7 +184,7 @@ public void givenObjectWhenChildObjectIsCreatedThenItIsCreatedProperly() { UUID.randomUUID(), StudioIdentifiers.SAMPLE_STUDIO_PROJECT.toString(), StudioIdentifiers.DOMAIN_OBJECT.toString(), - "Entity" + "types-Entity" ); var result = this.createChildMutationRunner.run(input); diff --git a/packages/view/backend/sirius-components-view-deck-edit/src/main/resources/plugin_ru.properties b/packages/view/backend/sirius-components-view-deck-edit/src/main/resources/plugin_ru.properties new file mode 100644 index 00000000000..96498e832e0 --- /dev/null +++ b/packages/view/backend/sirius-components-view-deck-edit/src/main/resources/plugin_ru.properties @@ -0,0 +1,71 @@ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation + +pluginName = Deck Edit Support +providerName = www.example.org + +_UI_CreateChild_text = {0} +_UI_CreateChild_text2 = {1} "{0}" +_UI_CreateChild_text3 = {1} +_UI_CreateChild_tooltip = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" +_UI_CreateChild_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}". +_UI_CreateSibling_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0441\u043E\u0441\u0435\u0434\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}", \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u0438\u0445 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u043E\u0431\u044A\u0435\u043A\u0442\u0430. + +_UI_PropertyDescriptor_description = \u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E "{0}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{1}" + +_UI_DeckDescription_type = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0434\u043E\u0441\u043E\u043A +_UI_LaneDescription_type = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0434\u043E\u0440\u043E\u0436\u0435\u043A +_UI_CardDescription_type = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A +_UI_DeckTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 +_UI_CreateCardTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A +_UI_EditCardTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A +_UI_DeleteCardTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A +_UI_EditLaneTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0434\u043E\u0440\u043E\u0436\u0435\u043A +_UI_CardDropTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A +_UI_LaneDropTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u0434\u043E\u0440\u043E\u0436\u0435\u043A +_UI_DeckElementDescription_type = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 +_UI_DeckDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C +_UI_ConditionalDeckDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C +_UI_DeckElementDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C +_UI_ConditionalDeckElementDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C +_UI_Unknown_type = \u041E\u0431\u044A\u0435\u043A\u0442 + +_UI_Unknown_datatype= \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 + +_UI_DeckDescription_laneDescriptions_feature = \u0414\u043E\u0440\u043E\u0436\u043A\u0438 +_UI_DeckDescription_backgroundColor_feature = \u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_DeckDescription_laneDropTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u0434\u043E\u0440\u043E\u0436\u0435\u043A +_UI_DeckDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_DeckDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_LaneDescription_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_LaneDescription_domainType_feature = \u0422\u0438\u043F +_UI_LaneDescription_ownedCardDescriptions_feature = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A +_UI_LaneDescription_editTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F +_UI_LaneDescription_createTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F +_UI_LaneDescription_cardDropTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A +_UI_LaneDescription_isCollapsibleExpression_feature = \u041C\u043E\u0436\u0435\u0442 \u0441\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_CardDescription_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_CardDescription_domainType_feature = \u0422\u0438\u043F +_UI_CardDescription_descriptionExpression_feature = \u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_CardDescription_editTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F +_UI_CardDescription_deleteTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F +_UI_DeckTool_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_DeckTool_body_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_DeckElementDescription_semanticCandidatesExpression_feature = \u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_DeckElementDescription_titleExpression_feature = \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_DeckElementDescription_labelExpression_feature = \u041D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_DeckElementDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_DeckElementDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_DeckDescriptionStyle_backgroundColor_feature = \u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_DeckElementDescriptionStyle_backgroundColor_feature = \u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_DeckElementDescriptionStyle_color_feature = \u0426\u0432\u0435\u0442 +_UI_Unknown_feature = \u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E + diff --git a/packages/view/backend/sirius-components-view-diagram-customnodes-edit/src/main/resources/plugin_ru.properties b/packages/view/backend/sirius-components-view-diagram-customnodes-edit/src/main/resources/plugin_ru.properties new file mode 100644 index 00000000000..fc519cdf502 --- /dev/null +++ b/packages/view/backend/sirius-components-view-diagram-customnodes-edit/src/main/resources/plugin_ru.properties @@ -0,0 +1,27 @@ +################################################################################ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation +################################################################################# +pluginName = Customnodes Edit Support +providerName = www.example.org +_UI_CreateChild_text = {0} +_UI_CreateChild_text2 = {1} "{0}" +_UI_CreateChild_text3 = {1} +_UI_CreateChild_tooltip = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" +_UI_CreateChild_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}". +_UI_CreateSibling_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0441\u043E\u0441\u0435\u0434\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}", \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u0438\u0445 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u043E\u0431\u044A\u0435\u043A\u0442\u0430. +_UI_PropertyDescriptor_description = \u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E "{0}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{1}" +_UI_EllipseNodeStyleDescription_type = \u0421\u0442\u0438\u043B\u044C \u0444\u0438\u0433\u0443\u0440\u044B \u0432 \u0432\u0438\u0434\u0435 \u044D\u043B\u043B\u0438\u043F\u0441\u0430 +_UI_Unknown_type = \u041E\u0431\u044A\u0435\u043A\u0442 +_UI_Unknown_datatype = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 +_UI_EllipseNodeStyleDescription_background_feature = \u0424\u043E\u043D +_UI_Unknown_feature = \u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E + diff --git a/packages/view/backend/sirius-components-view-diagram-edit/src/main/resources/plugin_ru.properties b/packages/view/backend/sirius-components-view-diagram-edit/src/main/resources/plugin_ru.properties new file mode 100644 index 00000000000..a756ceaef52 --- /dev/null +++ b/packages/view/backend/sirius-components-view-diagram-edit/src/main/resources/plugin_ru.properties @@ -0,0 +1,216 @@ +################################################################################ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation +################################################################################# +pluginName=Diagram Edit Support +providerName=www.example.org +_UI_CreateChild_text={0} +_UI_CreateChild_text2={1} "{0}" +_UI_CreateChild_text3={1} +_UI_CreateChild_tooltip=\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" +_UI_CreateChild_description=\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}". +_UI_CreateSibling_description=\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0441\u043E\u0441\u0435\u0434\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}", \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u0438\u0445 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u043E\u0431\u044A\u0435\u043A\u0442\u0430. +_UI_PropertyDescriptor_description=\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E "{0}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{1}" +_UI_DiagramDescription_type=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C +_UI_DiagramElementDescription_type=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C +_UI_NodeDescription_type=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_EdgeDescription_type=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_LayoutStrategyDescription_type=\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044F \u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_ListLayoutStrategyDescription_type=\u0420\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 \u0432 \u0432\u0438\u0434\u0435 \u0441\u043F\u0438\u0441\u043A\u0430 +_UI_FreeFormLayoutStrategyDescription_type=\u0421\u0432\u043E\u0431\u043E\u0434\u043D\u043E\u0435 \u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 +_UI_LabelDescription_type=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_InsideLabelDescription_type=\u041D\u0430\u0434\u043F\u0438\u0441\u044C \u0432\u043D\u0443\u0442\u0440\u0438 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_OutsideLabelDescription_type=\u041D\u0430\u0434\u043F\u0438\u0441\u044C \u0441\u043D\u0430\u0440\u0443\u0436\u0438 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_Style_type=\u0421\u0442\u0438\u043B\u044C +_UI_BorderStyle_type=\u0421\u0442\u0438\u043B\u044C \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_InsideLabelStyle_type=\u0421\u0442\u0438\u043B\u044C \u043D\u0430\u0434\u043F\u0438\u0441\u0438 \u0432\u043D\u0443\u0442\u0440\u0438 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_OutsideLabelStyle_type=\u0421\u0442\u0438\u043B\u044C \u043D\u0430\u0434\u043F\u0438\u0441\u0438 \u0441\u043D\u0430\u0440\u0443\u0436\u0438 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_NodeLabelStyle_type=\u0421\u0442\u0438\u043B\u044C \u043D\u0430\u0434\u043F\u0438\u0441\u0438 \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440\u044B +_UI_NodeStyleDescription_type=\u0421\u0442\u0438\u043B\u044C \u0444\u0438\u0433\u0443\u0440\u044B +_UI_ConditionalNodeStyle_type=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u0444\u0438\u0433\u0443\u0440\u044B +_UI_ConditionalInsideLabelStyle_type=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u043D\u0430\u0434\u043F\u0438\u0441\u0438 \u0432\u043D\u0443\u0442\u0440\u0438 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_ConditionalOutsideLabelStyle_type=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u043D\u0430\u0434\u043F\u0438\u0441\u0438 \u0441\u043D\u0430\u0440\u0443\u0436\u0438 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_RectangularNodeStyleDescription_type=\u0421\u0442\u0438\u043B\u044C \u0444\u0438\u0433\u0443\u0440\u044B \u0432 \u0432\u0438\u0434\u0435 \u043F\u0440\u044F\u043C\u043E\u0443\u0433\u043E\u043B\u044C\u043D\u0438\u043A\u0430 +_UI_ImageNodeStyleDescription_type=\u0421\u0442\u0438\u043B\u044C \u0444\u0438\u0433\u0443\u0440\u044B \u0432 \u0432\u0438\u0434\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F +_UI_IconLabelNodeStyleDescription_type=\u0421\u0442\u0438\u043B\u044C \u0444\u0438\u0433\u0443\u0440\u044B \u0432 \u0432\u0438\u0434\u0435 \u043D\u0430\u0434\u043F\u0438\u0441\u0438 \u0441\u043E \u0437\u043D\u0430\u0447\u043A\u043E\u043C +_UI_EdgeStyle_type=\u0421\u0442\u0438\u043B\u044C \u0441\u0432\u044F\u0437\u0438 +_UI_ConditionalEdgeStyle_type=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u0441\u0432\u044F\u0437\u0438 +_UI_DiagramPalette_type=\u041F\u0430\u043B\u0438\u0442\u0440\u0430 +_UI_NodePalette_type=\u041F\u0430\u043B\u0438\u0442\u0440\u0430 \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_EdgePalette_type=\u041F\u0430\u043B\u0438\u0442\u0440\u0430 \u0434\u043B\u044F \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_Tool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 +_UI_DeleteTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F +_UI_DropTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F +_UI_EdgeTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_EdgeReconnectionTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_LabelEditTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u0435\u0439 +_UI_NodeTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_SourceEdgeEndReconnectionTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u043D\u0430\u0447\u0430\u043B\u0430 \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_TargetEdgeEndReconnectionTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u043A\u043E\u043D\u0446\u0430 \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_CreateView_type=\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 +_UI_DeleteView_type=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 +_UI_SelectionDescription_type=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0432\u044B\u0431\u043E\u0440\u0430 +_UI_ToolSection_type=\u0413\u0440\u0443\u043F\u043F\u0430 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 +_UI_DiagramToolSection_type=\u0413\u0440\u0443\u043F\u043F\u0430 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u0434\u043B\u044F \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B +_UI_NodeToolSection_type=\u0413\u0440\u0443\u043F\u043F\u0430 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440\u044B +_UI_EdgeToolSection_type=\u0413\u0440\u0443\u043F\u043F\u0430 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u0434\u043B\u044F \u0441\u0432\u044F\u0437\u0438 +_UI_DropNodeTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_Unknown_type=\u041E\u0431\u044A\u0435\u043A\u0442 +_UI_Unknown_datatype=\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 +_UI_DiagramDescription_autoLayout_feature=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u0435 \u0444\u0438\u0433\u0443\u0440 +_UI_DiagramDescription_palette_feature=\u041F\u0430\u043B\u0438\u0442\u0440\u0430 +_UI_DiagramDescription_nodeDescriptions_feature=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 \u0444\u0438\u0433\u0443\u0440 +_UI_DiagramDescription_edgeDescriptions_feature=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_DiagramDescription_arrangeLayoutDirection_feature=\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_DiagramElementDescription_name_feature=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_DiagramElementDescription_domainType_feature=\u0422\u0438\u043F +_UI_DiagramElementDescription_semanticCandidatesExpression_feature=\u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043C\u043E\u0434\u0435\u043B\u0438 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_DiagramElementDescription_preconditionExpression_feature=\u041F\u0440\u0435\u0434\u0443\u0441\u043B\u043E\u0432\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_DiagramElementDescription_synchronizationPolicy_feature=\u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430 \u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u0438 +_UI_NodeDescription_collapsible_feature=\u041C\u043E\u0436\u043D\u043E \u0441\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044C +_UI_NodeDescription_palette_feature=\u041F\u0430\u043B\u0438\u0442\u0440\u0430 +_UI_NodeDescription_childrenLayoutStrategy_feature=\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044F \u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u044F \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0445 \u0444\u0438\u0433\u0443\u0440 +_UI_NodeDescription_style_feature=\u0421\u0442\u0438\u043B\u044C +_UI_NodeDescription_conditionalStyles_feature=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_NodeDescription_childrenDescriptions_feature=\u0414\u043E\u0447\u0435\u0440\u043D\u0438\u0435 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_NodeDescription_borderNodesDescriptions_feature=\u0424\u0438\u0433\u0443\u0440\u044B \u043D\u0430 \u0433\u0440\u0430\u043D\u0438\u0446\u0435 +_UI_NodeDescription_reusedChildNodeDescriptions_feature=\u041F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0435 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0435 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_NodeDescription_reusedBorderNodeDescriptions_feature=\u041F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0435 \u0444\u0438\u0433\u0443\u0440\u044B \u043D\u0430 \u0433\u0440\u0430\u043D\u0438\u0446\u0435 +_UI_NodeDescription_userResizable_feature=\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0438 \u043C\u043E\u0433\u0443\u0442 \u0438\u0437\u043C\u0435\u043D\u044F\u0442\u044C \u0440\u0430\u0437\u043C\u0435\u0440 +_UI_NodeDescription_defaultWidthExpression_feature=\u0428\u0438\u0440\u0438\u043D\u0430 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_NodeDescription_defaultHeightExpression_feature=\u0412\u044B\u0441\u043E\u0442\u0430 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_NodeDescription_keepAspectRatio_feature=\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u0441\u043E\u043E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u0435 \u0441\u0442\u043E\u0440\u043E\u043D +_UI_NodeDescription_isCollapsedByDefaultExpression_feature=\u0421\u0432\u0451\u0440\u043D\u0443\u0442\u043E \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_NodeDescription_isHiddenByDefaultExpression_feature=\u0421\u043A\u0440\u044B\u0442\u043E \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_NodeDescription_isFadedByDefaultExpression_feature=\u0417\u0430\u0442\u0435\u043D\u0435\u043D\u043E \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_NodeDescription_insideLabel_feature=\u041D\u0430\u0434\u043F\u0438\u0441\u044C \u0432\u043D\u0443\u0442\u0440\u0438 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_NodeDescription_outsideLabels_feature=\u041D\u0430\u0434\u043F\u0438\u0441\u044C \u0441\u043D\u0430\u0440\u0443\u0436\u0438 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_EdgeDescription_beginLabelExpression_feature=\u041D\u0430\u0447\u0430\u043B\u044C\u043D\u0430\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_EdgeDescription_centerLabelExpression_feature=\u0426\u0435\u043D\u0442\u0440\u0430\u043B\u044C\u043D\u0430\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_EdgeDescription_endLabelExpression_feature=\u041A\u043E\u043D\u0435\u0447\u043D\u0430\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_EdgeDescription_isDomainBasedEdge_feature=\u041E\u0441\u043D\u043E\u0432\u0430\u043D\u043E \u043D\u0430 \u0442\u0438\u043F\u0435 +_UI_EdgeDescription_palette_feature=\u041F\u0430\u043B\u0438\u0442\u0440\u0430 +_UI_EdgeDescription_sourceNodeDescriptions_feature=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0445 \u0444\u0438\u0433\u0443\u0440 +_UI_EdgeDescription_targetNodeDescriptions_feature=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 \u0446\u0435\u043B\u0435\u0432\u044B\u0445 \u0444\u0438\u0433\u0443\u0440 +_UI_EdgeDescription_sourceNodesExpression_feature=\u0418\u0441\u0445\u043E\u0434\u043D\u044B\u0435 \u0444\u0438\u0433\u0443\u0440\u044B (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_EdgeDescription_targetNodesExpression_feature=\u0426\u0435\u043B\u0435\u0432\u044B\u0435 \u0444\u0438\u0433\u0443\u0440\u044B (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_EdgeDescription_style_feature=\u0421\u0442\u0438\u043B\u044C +_UI_EdgeDescription_conditionalStyles_feature=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_ListLayoutStrategyDescription_areChildNodesDraggableExpression_feature=\u0414\u043E\u0447\u0435\u0440\u043D\u0438\u0435 \u0444\u0438\u0433\u0443\u0440\u044B \u043C\u043E\u0433\u0443\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u0442\u044C\u0441\u044F (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_ListLayoutStrategyDescription_topGapExpression_feature=\u041E\u0442\u0441\u0442\u0443\u043F \u0441\u0432\u0435\u0440\u0445\u0443 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_ListLayoutStrategyDescription_bottomGapExpression_feature=\u041E\u0442\u0441\u0442\u0443\u043F \u0441\u043D\u0438\u0437\u0443 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_LabelDescription_labelExpression_feature=\u041D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_LabelDescription_overflowStrategy_feature=\u041F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u0434\u043B\u044F \u0434\u043B\u0438\u043D\u043D\u044B\u0445 \u043D\u0430\u0434\u043F\u0438\u0441\u0435\u0439 +_UI_InsideLabelDescription_position_feature=\u0420\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 +_UI_InsideLabelDescription_style_feature=\u0421\u0442\u0438\u043B\u044C +_UI_InsideLabelDescription_conditionalStyles_feature=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_OutsideLabelDescription_position_feature=\u0420\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 +_UI_OutsideLabelDescription_style_feature=\u0421\u0442\u0438\u043B\u044C +_UI_OutsideLabelDescription_conditionalStyles_feature=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_ListLayoutStrategyDescription_growableNodes_feature=\u0424\u0438\u0433\u0443\u0440\u044B \u043C\u043E\u0433\u0443\u0442 \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F +_UI_Style_color_feature=\u0426\u0432\u0435\u0442 +_UI_BorderStyle_borderColor_feature=\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_BorderStyle_borderRadius_feature=\u0420\u0430\u0434\u0438\u0443\u0441 \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_BorderStyle_borderSize_feature=\u0422\u043E\u043B\u0449\u0438\u043D\u0430 \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_BorderStyle_borderLineStyle_feature=\u0421\u0442\u0438\u043B\u044C \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_InsideLabelStyle_withHeader_feature=\u0421 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u043C +_UI_InsideLabelStyle_displayHeaderSeparator_feature=\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430 +_UI_NodeLabelStyle_labelColor_feature=\u0426\u0432\u0435\u0442 \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_NodeLabelStyle_showIcon_feature=\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u043E\u043A +_UI_NodeLabelStyle_labelIcon_feature=\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_ConditionalNodeStyle_style_feature=\u0421\u0442\u0438\u043B\u044C +_UI_ConditionalInsideLabelStyle_style_feature=\u0421\u0442\u0438\u043B\u044C +_UI_ConditionalOutsideLabelStyle_style_feature=\u0421\u0442\u0438\u043B\u044C +_UI_RectangularNodeStyleDescription_background_feature=\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_ImageNodeStyleDescription_shape_feature=\u0424\u0438\u0433\u0443\u0440\u0430 +_UI_ImageNodeStyleDescription_positionDependentRotation_feature=\u041F\u043E\u0432\u043E\u0440\u043E\u0442 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u0438 \u043E\u0442 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u044F +_UI_IconLabelNodeStyleDescription_background_feature=\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_EdgeStyle_lineStyle_feature=\u0421\u0442\u0438\u043B\u044C \u043B\u0438\u043D\u0438\u0438 +_UI_EdgeStyle_sourceArrowStyle_feature=\u0421\u0442\u0438\u043B\u044C \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0439 \u0441\u0442\u0440\u0435\u043B\u043A\u0438 +_UI_EdgeStyle_targetArrowStyle_feature=\u0421\u0442\u0438\u043B\u044C \u043A\u043E\u043D\u0435\u0447\u043D\u043E\u0439 \u0441\u0442\u0440\u0435\u043B\u043A\u0438 +_UI_EdgeStyle_edgeWidth_feature=\u0422\u043E\u043B\u0449\u0438\u043D\u0430 \u043B\u0438\u043D\u0438\u0438 +_UI_EdgeStyle_showIcon_feature=\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u043E\u043A +_UI_EdgeStyle_labelIcon_feature=\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_DiagramPalette_dropTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F +_UI_DiagramPalette_dropNodeTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_DiagramPalette_nodeTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_DiagramPalette_toolSections_feature=\u0413\u0440\u0443\u043F\u043F\u044B \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 +_UI_NodePalette_deleteTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F +_UI_NodePalette_labelEditTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_NodePalette_dropNodeTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_NodePalette_nodeTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_NodePalette_edgeTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_NodePalette_toolSections_feature=\u0413\u0440\u0443\u043F\u043F\u044B \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 +_UI_EdgePalette_deleteTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F +_UI_EdgePalette_centerLabelEditTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0446\u0435\u043D\u0442\u0440\u0430\u043B\u044C\u043D\u043E\u0439 \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_EdgePalette_beginLabelEditTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0439 \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_EdgePalette_endLabelEditTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043A\u043E\u043D\u0435\u0447\u043D\u043E\u0439 \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_EdgePalette_nodeTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_EdgePalette_edgeReconnectionTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u043F\u0435\u0440\u0435\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_EdgePalette_toolSections_feature=\u0413\u0440\u0443\u043F\u043F\u044B \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 +_UI_Tool_name_feature=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_Tool_preconditionExpression_feature=\u041F\u0440\u0435\u0434\u0443\u0441\u043B\u043E\u0432\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_Tool_body_feature=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_EdgeTool_targetElementDescriptions_feature=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 \u0446\u0435\u043B\u0435\u0432\u044B\u0445 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 +_UI_EdgeTool_iconURLsExpression_feature=\u0410\u0434\u0440\u0435\u0441\u0430 \u0437\u043D\u0430\u0447\u043A\u043E\u0432 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_LabelEditTool_initialDirectEditLabelExpression_feature=\u041D\u0430\u0447\u0430\u043B\u044C\u043D\u0430\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_NodeTool_selectionDescription_feature=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0432\u044B\u0431\u043E\u0440\u0430 +_UI_NodeTool_iconURLsExpression_feature=\u0410\u0434\u0440\u0435\u0441\u0430 \u0437\u043D\u0430\u0447\u043A\u043E\u0432 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_CreateView_parentViewExpression_feature=\u0420\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0435 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_CreateView_elementDescription_feature=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 +_UI_CreateView_semanticElementExpression_feature=\u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_CreateView_variableName_feature=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0439 +_UI_CreateView_containmentKind_feature=\u0422\u0438\u043F \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u044F +_UI_DeleteView_viewExpression_feature=\u041F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_SelectionDescription_selectionCandidatesExpression_feature=\u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0432\u044B\u0431\u043E\u0440\u0430 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_SelectionDescription_selectionMessage_feature=\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 +_UI_ToolSection_name_feature=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_DiagramToolSection_nodeTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_NodeToolSection_nodeTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_NodeToolSection_edgeTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_EdgeToolSection_nodeTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_DropNodeTool_acceptedNodeTypes_feature=\u0414\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435 \u0442\u0438\u043F\u044B \u0444\u0438\u0433\u0443\u0440 +_UI_Unknown_feature=\u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E +_UI_ArrowStyle_None_literal=\u043D\u0435\u0442 +_UI_ArrowStyle_OutputArrow_literal=\u0432\u044B\u0445\u043E\u0434\u043D\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 +_UI_ArrowStyle_InputArrow_literal=\u0432\u0445\u043E\u0434\u043D\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 +_UI_ArrowStyle_OutputClosedArrow_literal=\u0432\u044B\u0445\u043E\u0434\u043D\u0430\u044F \u0437\u0430\u043A\u0440\u044B\u0442\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 +_UI_ArrowStyle_InputClosedArrow_literal=\u0432\u0445\u043E\u0434\u043D\u0430\u044F \u0437\u0430\u043A\u0440\u044B\u0442\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 +_UI_ArrowStyle_OutputFillClosedArrow_literal=\u0432\u044B\u0445\u043E\u0434\u043D\u0430\u044F \u0437\u0430\u043A\u0440\u0430\u0448\u0435\u043D\u043D\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 +_UI_ArrowStyle_InputFillClosedArrow_literal=\u0432\u0445\u043E\u0434\u043D\u0430\u044F \u0437\u0430\u043A\u0440\u0430\u0448\u0435\u043D\u043D\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 +_UI_ArrowStyle_Diamond_literal=\u0440\u043E\u043C\u0431 +_UI_ArrowStyle_FillDiamond_literal=\u0437\u0430\u043A\u0440\u0430\u0448\u0435\u043D\u043D\u044B\u0439 \u0440\u043E\u043C\u0431 +_UI_ArrowStyle_InputArrowWithDiamond_literal=\u0432\u0445\u043E\u0434\u043D\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 \u0441 \u0440\u043E\u043C\u0431\u043E\u043C +_UI_ArrowStyle_InputArrowWithFillDiamond_literal=\u0432\u0445\u043E\u0434\u043D\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 \u0441 \u0437\u0430\u043A\u0440\u0430\u0448\u0435\u043D\u043D\u044B\u043C \u0440\u043E\u043C\u0431\u043E\u043C +_UI_ArrowStyle_Circle_literal=\u043A\u0440\u0443\u0433 +_UI_ArrowStyle_FillCircle_literal=\u0437\u0430\u043A\u0440\u0430\u0448\u0435\u043D\u043D\u044B\u0439 \u043A\u0440\u0443\u0433 +_UI_ArrowStyle_CrossedCircle_literal=\u043F\u0435\u0440\u0435\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u044B\u0439 \u043A\u0440\u0443\u0433 +_UI_ArrowStyle_ClosedArrowWithVerticalBar_literal=\u0437\u0430\u043A\u0440\u044B\u0442\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 \u0441 \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u043E\u0439 \u043B\u0438\u043D\u0438\u0435\u0439 +_UI_ArrowStyle_ClosedArrowWithDots_literal=\u0437\u0430\u043A\u0440\u044B\u0442\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 \u0441 \u0442\u043E\u0447\u043A\u0430\u043C\u0438 +_UI_LayoutDirection_Column_literal=\u0441\u0442\u043E\u043B\u0431\u0435\u0446 +_UI_LineStyle_Solid_literal=\u0441\u043F\u043B\u043E\u0448\u043D\u0430\u044F +_UI_LineStyle_Dash_literal=\u0448\u0442\u0440\u0438\u0445\u043E\u0432\u0430\u044F +_UI_LineStyle_Dot_literal=\u043F\u0443\u043D\u043A\u0442\u0438\u0440\u043D\u0430\u044F +_UI_LineStyle_Dash_Dot_literal=\u0448\u0442\u0440\u0438\u0445\u043F\u0443\u043D\u043A\u0442\u0438\u0440\u043D\u0430\u044F +_UI_NodeContainmentKind_CHILD_NODE_literal=\u0434\u043E\u0447\u0435\u0440\u043D\u044F\u044F \u0444\u0438\u0433\u0443\u0440\u0430 +_UI_NodeContainmentKind_BORDER_NODE_literal=\u0444\u0438\u0433\u0443\u0440\u0430 \u043D\u0430 \u0433\u0440\u0430\u043D\u0438\u0446\u0435 +_UI_SynchronizationPolicy_SYNCHRONIZED_literal=\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043E +_UI_SynchronizationPolicy_UNSYNCHRONIZED_literal=\u043D\u0435 \u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043E +_UI_InsideLabelPosition_TOP_CENTER_literal=\u0441\u0432\u0435\u0440\u0445\u0443 \u043F\u043E \u0446\u0435\u043D\u0442\u0440\u0443 +_UI_OutsideLabelPosition_BOTTOM_CENTER_literal=\u0441\u043D\u0438\u0437\u0443 \u043F\u043E \u0446\u0435\u043D\u0442\u0440\u0443 +_UI_LabelOverflowStrategy_NONE_literal=\u043D\u0435\u0442 +_UI_LabelOverflowStrategy_WRAP_literal=\u043F\u0435\u0440\u0435\u043D\u043E\u0441 +_UI_LabelOverflowStrategy_ELLIPSIS_literal=\u043C\u043D\u043E\u0433\u043E\u0442\u043E\u0447\u0438\u0435 +_UI_ArrangeLayoutDirection_UNDEFINED_literal=\u043D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E +_UI_ArrangeLayoutDirection_RIGHT_literal=\u043D\u0430\u043F\u0440\u0430\u0432\u043E +_UI_ArrangeLayoutDirection_DOWN_literal=\u0432\u043D\u0438\u0437 +_UI_ArrangeLayoutDirection_LEFT_literal=\u043D\u0430\u043B\u0435\u0432\u043E +_UI_ArrangeLayoutDirection_UP_literal=\u043D\u0430\u0432\u0435\u0440\u0445 diff --git a/packages/view/backend/sirius-components-view-edit/src/main/resources/plugin_ru.properties b/packages/view/backend/sirius-components-view-edit/src/main/resources/plugin_ru.properties new file mode 100644 index 00000000000..b1dc2292cf4 --- /dev/null +++ b/packages/view/backend/sirius-components-view-edit/src/main/resources/plugin_ru.properties @@ -0,0 +1,75 @@ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation + +pluginName = View Edit Support +providerName = www.example.org + +_UI_CreateChild_text = {0} +_UI_CreateChild_text2 = {1} "{0}" +_UI_CreateChild_text3 = {1} +_UI_CreateChild_tooltip = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" +_UI_CreateChild_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}". +_UI_CreateSibling_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0441\u043E\u0441\u0435\u0434\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}", \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u0438\u0445 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u043E\u0431\u044A\u0435\u043A\u0442\u0430. + +_UI_PropertyDescriptor_description = \u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E "{0}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{1}" + +_UI_View_type = \u041F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 +_UI_ColorPalette_type = \u041F\u0430\u043B\u0438\u0442\u0440\u0430 \u0446\u0432\u0435\u0442\u043E\u0432 +_UI_FixedColor_type = \u0424\u0438\u043A\u0441\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0446\u0432\u0435\u0442 +_UI_UserColor_type = \u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0446\u0432\u0435\u0442 +_UI_RepresentationDescription_type = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044F +_UI_LabelStyle_type = \u0421\u0442\u0438\u043B\u044C \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_Operation_type = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_ChangeContext_type = \u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 +_UI_CreateInstance_type = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 +_UI_SetValue_type = \u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 +_UI_UnsetValue_type = \u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 +_UI_DeleteElement_type = \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u044D\u043B\u0435\u043C\u0435\u043D\u0442 +_UI_Let_type = \u041F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u0430\u044F +_UI_If_type = \u0423\u0441\u043B\u043E\u0432\u0438\u0435 +_UI_Conditional_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 +_UI_For_type = \u0426\u0438\u043A\u043B +_UI_Unknown_type = \u041E\u0431\u044A\u0435\u043A\u0442 + +_UI_Unknown_datatype= \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 + +_UI_View_descriptions_feature = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 +_UI_View_colorPalettes_feature = \u041F\u0430\u043B\u0438\u0442\u0440\u044B \u0446\u0432\u0435\u0442\u043E\u0432 +_UI_ColorPalette_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_ColorPalette_colors_feature = \u0426\u0432\u0435\u0442\u0430 +_UI_FixedColor_value_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 +_UI_UserColor_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_RepresentationDescription_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_RepresentationDescription_domainType_feature = \u0422\u0438\u043F \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432 +_UI_RepresentationDescription_preconditionExpression_feature = \u041F\u0440\u0435\u0434\u0443\u0441\u043B\u043E\u0432\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_RepresentationDescription_titleExpression_feature = \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_LabelStyle_fontSize_feature = \u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 +_UI_LabelStyle_italic_feature = \u041A\u0443\u0440\u0441\u0438\u0432 +_UI_LabelStyle_bold_feature = \u041F\u043E\u043B\u0443\u0436\u0438\u0440\u043D\u044B\u0439 +_UI_LabelStyle_underline_feature = \u041F\u043E\u0434\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u044B\u0439 +_UI_LabelStyle_strikeThrough_feature = \u0417\u0430\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u044B\u0439 +_UI_Operation_children_feature = \u0414\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u043E\u0431\u044A\u0435\u043A\u0442 +_UI_ChangeContext_expression_feature = \u0412\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435 +_UI_CreateInstance_typeName_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0442\u0438\u043F\u0430 +_UI_CreateInstance_referenceName_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0441\u044B\u043B\u043A\u0438 +_UI_CreateInstance_variableName_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0439 +_UI_SetValue_featureName_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 +_UI_SetValue_valueExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_UnsetValue_featureName_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 +_UI_UnsetValue_elementExpression_feature = \u042D\u043B\u0435\u043C\u0435\u043D\u0442 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_Let_variableName_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0439 +_UI_Let_valueExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_If_conditionExpression_feature = \u0423\u0441\u043B\u043E\u0432\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_Conditional_condition_feature = \u0423\u0441\u043B\u043E\u0432\u0438\u0435 +_UI_For_expression_feature = \u0412\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435 +_UI_For_iteratorName_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0438\u0442\u0435\u0440\u0430\u0442\u043E\u0440\u0430 +_UI_Unknown_feature = \u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E + diff --git a/packages/view/backend/sirius-components-view-emf/pom.xml b/packages/view/backend/sirius-components-view-emf/pom.xml index b976ddae11b..19090a396b0 100644 --- a/packages/view/backend/sirius-components-view-emf/pom.xml +++ b/packages/view/backend/sirius-components-view-emf/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.2.5 - - - org.eclipse.sirius - sirius-components-view-emf - 2024.5.3 - sirius-components-view-emf - Sirius Components View EMF + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.2.5 + + + org.eclipse.sirius + sirius-components-view-emf + 2024.5.3 + sirius-components-view-emf + Sirius Components View EMF - - 17 - 7.2.0-SNAPSHOT - + + 17 + 7.2.0-SNAPSHOT + - - - Central - https://repo.maven.apache.org/maven2 - - - Eclipse Sirius - Sirius Repository - Snapshots - https://repo.eclipse.org/content/repositories/sirius-snapshots/ - - true - - - - github-sirius-emfjson - https://maven.pkg.github.com/eclipse-sirius/sirius-emf-json - - + + + Central + https://repo.maven.apache.org/maven2 + + + Eclipse Sirius + Sirius Repository - Snapshots + https://repo.eclipse.org/content/repositories/sirius-snapshots/ + + true + + + + github-sirius-emfjson + https://maven.pkg.github.com/eclipse-sirius/sirius-emf-json + + - - - github - Apache Maven Packages - https://maven.pkg.github.com/eclipse-sirius/sirius-web - - + + + github + Apache Maven Packages + https://maven.pkg.github.com/eclipse-sirius/sirius-web + + - - - org.eclipse.sirius - sirius-components-emf - 2024.5.3 - - - org.eclipse.sirius - sirius-components-domain - 2024.5.3 - - - org.eclipse.sirius - sirius-components-collaborative-diagrams - 2024.5.3 - - - org.eclipse.sirius - sirius-components-collaborative-forms - 2024.5.3 - - - org.eclipse.sirius - sirius-components-collaborative-selection - 2024.5.3 - - - org.eclipse.sirius - org.eclipse.sirius.ecore.extender - ${sirius.version} - - - org.eclipse.sirius - sirius-components-view-diagram - 2024.5.3 - - - org.eclipse.sirius - sirius-components-view-form - 2024.5.3 - - - org.eclipse.sirius - sirius-components-view-gantt - 2024.5.3 - - - org.eclipse.sirius - sirius-components-view-deck + + + org.eclipse.sirius + sirius-components-emf + 2024.5.3 + + + org.eclipse.sirius + sirius-components-domain + 2024.5.3 + + + org.eclipse.sirius + sirius-components-collaborative-diagrams + 2024.5.3 + + + org.eclipse.sirius + sirius-components-collaborative-forms + 2024.5.3 + + + org.eclipse.sirius + sirius-components-collaborative-selection + 2024.5.3 + + + org.eclipse.sirius + org.eclipse.sirius.ecore.extender + ${sirius.version} + + + org.eclipse.sirius + sirius-components-view-diagram + 2024.5.3 + + + org.eclipse.sirius + sirius-components-view-diagram-edit + 2024.5.3 + + + org.eclipse.sirius + sirius-components-view-form + 2024.5.3 + + + org.eclipse.sirius + sirius-components-view-gantt + 2024.5.3 + + + org.eclipse.sirius + sirius-components-view-deck 2024.5.3 - - - org.eclipse.sirius - sirius-components-emf-forms - 2024.5.3 - - - org.eclipse.sirius - sirius-components-diagrams - 2024.5.3 - - - org.eclipse.sirius - sirius-components-deck + + + org.eclipse.sirius + sirius-components-emf-forms + 2024.5.3 + + + org.eclipse.sirius + sirius-components-diagrams + 2024.5.3 + + + org.eclipse.sirius + sirius-components-deck + 2024.5.3 + + + org.springframework.boot + spring-boot-starter-test + test + + + org.eclipse.sirius + sirius-components-tests + 2024.5.3 + test + + + org.eclipse.sirius + sirius-components-diagrams-tests + 2024.5.3 + test + + + org.eclipse.sirius + sirius-components-spring-tests 2024.5.3 - - - org.springframework.boot - spring-boot-starter-test - test - - - org.eclipse.sirius - sirius-components-tests - 2024.5.3 - test - - - org.eclipse.sirius - sirius-components-diagrams-tests - 2024.5.3 - test - - - org.eclipse.sirius - sirius-components-spring-tests - 2024.5.3 - test - - + test + + - - - - org.apache.maven.plugins - maven-checkstyle-plugin - 3.3.1 - - ../../../releng/backend/sirius-components-resources/checkstyle/CheckstyleConfiguration.xml - true - true - true - - - - validate - validate - - check - - - - - - org.jacoco - jacoco-maven-plugin - 0.8.12 - - - - prepare-agent - - - - report - prepare-package - - report - - - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.3.1 + + ../../../releng/backend/sirius-components-resources/checkstyle/CheckstyleConfiguration.xml + true + true + true + + + + validate + validate + + check + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.12 + + + + prepare-agent + + + + report + prepare-package + + report + + + + + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar + + + + + + diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/FixedColorPropertiesConfigurer.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/FixedColorPropertiesConfigurer.java index 564593389c5..e4771837d97 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/FixedColorPropertiesConfigurer.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/FixedColorPropertiesConfigurer.java @@ -30,6 +30,7 @@ import org.eclipse.sirius.components.core.api.IIdentityService; import org.eclipse.sirius.components.core.api.ILabelService; import org.eclipse.sirius.components.core.api.IValidationService; +import org.eclipse.sirius.components.emf.services.messages.IEMFMessageService; import org.eclipse.sirius.components.forms.description.AbstractControlDescription; import org.eclipse.sirius.components.forms.description.GroupDescription; import org.eclipse.sirius.components.forms.description.PageDescription; @@ -41,6 +42,7 @@ import org.eclipse.sirius.components.view.FixedColor; import org.eclipse.sirius.components.view.UserColor; import org.eclipse.sirius.components.view.ViewPackage; +import org.eclipse.sirius.components.view.provider.ViewEditPlugin; import org.eclipse.sirius.components.view.util.services.ColorPaletteService; import org.springframework.stereotype.Component; @@ -59,10 +61,13 @@ public class FixedColorPropertiesConfigurer implements IPropertiesDescriptionReg private final List validationServices; - public FixedColorPropertiesConfigurer(IIdentityService identityService, ILabelService labelService, List validationServices) { + private final IEMFMessageService emfMessageService; + + public FixedColorPropertiesConfigurer(IIdentityService identityService, ILabelService labelService, List validationServices, IEMFMessageService emfMessageService) { this.identityService = Objects.requireNonNull(identityService); this.labelService = Objects.requireNonNull(labelService); this.validationServices = Objects.requireNonNull(validationServices); + this.emfMessageService = Objects.requireNonNull(emfMessageService); } @Override @@ -86,13 +91,15 @@ private PageDescription getFixedColorProperties() { private List getGeneralControlDescription() { List controls = new ArrayList<>(); - var name = this.createTextField("fixedcolor.name", "Name", + var name = this.createTextField("fixedcolor.name", + ViewEditPlugin.INSTANCE.getString("_UI_UserColor_name_feature"), color -> ((UserColor) color).getName(), (color, newName) -> ((UserColor) color).setName(newName), ViewPackage.Literals.USER_COLOR__NAME); controls.add(name); - var value = this.createTextField("fixedcolor.value", "Value", + var value = this.createTextField("fixedcolor.value", + ViewEditPlugin.INSTANCE.getString("_UI_FixedColor_value_feature"), color -> ((FixedColor) color).getValue(), (color, newValue) -> ((FixedColor) color).setValue(newValue), ViewPackage.Literals.FIXED_COLOR__VALUE); @@ -122,7 +129,7 @@ private GroupDescription createSimpleGroupDescription(List "group") - .labelProvider(variableManager -> "Core Properties") + .labelProvider(variableManager -> this.emfMessageService.coreProperties()) .semanticElementsProvider(semanticElementsProvider) .controlDescriptions(controls) .build(); diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/ViewPropertiesDescriptionRegistryConfigurer.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/ViewPropertiesDescriptionRegistryConfigurer.java index 36491f4802f..b97a994d5fd 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/ViewPropertiesDescriptionRegistryConfigurer.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/ViewPropertiesDescriptionRegistryConfigurer.java @@ -235,7 +235,7 @@ public boolean handles(EAttribute eAttribute) { return GroupDescription.newGroupDescription("groupId") .idProvider(variableManager -> "Core Properties") - .labelProvider(variableManager -> "Core Properties") + .labelProvider(variableManager -> this.emfMessageService.coreProperties()) .semanticElementsProvider(variableManager -> Collections.singletonList(variableManager.getVariables().get(VariableManager.SELF))) .controlDescriptions(controlDescriptions) .build(); diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/PropertiesWidgetCreationService.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/PropertiesWidgetCreationService.java index 7ff8686a922..2b6200fc724 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/PropertiesWidgetCreationService.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/PropertiesWidgetCreationService.java @@ -31,6 +31,7 @@ import org.eclipse.sirius.components.core.api.IFeedbackMessageService; import org.eclipse.sirius.components.core.api.IObjectService; import org.eclipse.sirius.components.emf.services.api.IEMFKindService; +import org.eclipse.sirius.components.emf.services.messages.IEMFMessageService; import org.eclipse.sirius.components.forms.description.AbstractControlDescription; import org.eclipse.sirius.components.forms.description.CheckboxDescription; import org.eclipse.sirius.components.forms.description.GroupDescription; @@ -61,13 +62,15 @@ public class PropertiesWidgetCreationService implements IPropertiesWidgetCreatio private final IObjectService objectService; private final IEMFKindService emfKindService; private final IFeedbackMessageService feedbackMessageService; + private final IEMFMessageService emfMessageService; private final AQLTextfieldCustomizer aqlTextfieldCustomizer; - public PropertiesWidgetCreationService(IPropertiesConfigurerService propertiesConfigurerService, IObjectService objectService, IEMFKindService emfKindService, IFeedbackMessageService feedbackMessageService, AQLTextfieldCustomizer aqlTextfieldCustomizer) { + public PropertiesWidgetCreationService(IPropertiesConfigurerService propertiesConfigurerService, IObjectService objectService, IEMFKindService emfKindService, IFeedbackMessageService feedbackMessageService, IEMFMessageService emfMessageService, AQLTextfieldCustomizer aqlTextfieldCustomizer) { this.propertiesConfigurerService = Objects.requireNonNull(propertiesConfigurerService); this.objectService = Objects.requireNonNull(objectService); this.emfKindService = Objects.requireNonNull(emfKindService); this.feedbackMessageService = Objects.requireNonNull(feedbackMessageService); + this.emfMessageService = Objects.requireNonNull(emfMessageService); this.aqlTextfieldCustomizer = Objects.requireNonNull(aqlTextfieldCustomizer); } @@ -75,7 +78,7 @@ public PropertiesWidgetCreationService(IPropertiesConfigurerService propertiesCo public PageDescription createSimplePageDescription(String id, GroupDescription groupDescription, Predicate canCreatePredicate) { return PageDescription.newPageDescription(id) .idProvider(variableManager -> "page") - .labelProvider(variableManager -> "Properties") + .labelProvider(variableManager -> this.emfMessageService.properties()) .semanticElementsProvider(this.propertiesConfigurerService.getSemanticElementsProvider()) .canCreatePredicate(canCreatePredicate) .groupDescriptions(List.of(groupDescription)) @@ -86,7 +89,7 @@ public PageDescription createSimplePageDescription(String id, GroupDescription g public GroupDescription createSimpleGroupDescription(List controls) { return GroupDescription.newGroupDescription("group") .idProvider(variableManager -> "group") - .labelProvider(variableManager -> "General") + .labelProvider(variableManager -> this.emfMessageService.general()) .semanticElementsProvider(this.propertiesConfigurerService.getSemanticElementsProvider()) .controlDescriptions(controls) .build(); diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/EdgeStylePropertiesConfigurer.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/EdgeStylePropertiesConfigurer.java index 04d056d98b8..108e6d99317 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/EdgeStylePropertiesConfigurer.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/EdgeStylePropertiesConfigurer.java @@ -50,6 +50,7 @@ import org.eclipse.sirius.components.view.diagram.DiagramPackage; import org.eclipse.sirius.components.view.diagram.EdgeStyle; import org.eclipse.sirius.components.view.diagram.LineStyle; +import org.eclipse.sirius.components.view.diagram.provider.DiagramEditPlugin; import org.eclipse.sirius.components.view.emf.api.CustomImageMetadata; import org.eclipse.sirius.components.view.emf.api.ICustomImageMetadataSearchService; import org.eclipse.sirius.components.view.emf.compatibility.IPropertiesConfigurerService; @@ -67,6 +68,7 @@ public class EdgeStylePropertiesConfigurer implements IPropertiesDescriptionRegi private static final String EMPTY = ""; private static final String INT_PATTERN = "\\d+"; + private static final String LITERAL = "_literal"; private final ICustomImageMetadataSearchService customImageSearchService; private final IPropertiesConfigurerService propertiesConfigurerService; private final IPropertiesWidgetCreationService propertiesWidgetCreationService; @@ -98,7 +100,8 @@ public void addPropertiesDescriptions(IPropertiesDescriptionRegistry registry) { private List getGeneralControlDescription() { List controls = new ArrayList<>(); - var fontSize = this.propertiesWidgetCreationService.createTextField("nodestyle.fontSize", "Font Size", + var fontSize = this.propertiesWidgetCreationService.createTextField("nodestyle.fontSize", + DiagramEditPlugin.INSTANCE.getString("_UI_LabelStyle_fontSize_feature"), style -> String.valueOf(((LabelStyle) style).getFontSize()), (style, newColor) -> { try { @@ -110,31 +113,36 @@ private List getGeneralControlDescription() { ViewPackage.Literals.LABEL_STYLE__FONT_SIZE); controls.add(fontSize); - var italic = this.propertiesWidgetCreationService.createCheckbox("nodestyle.italic", "Italic", + var italic = this.propertiesWidgetCreationService.createCheckbox("nodestyle.italic", + DiagramEditPlugin.INSTANCE.getString("_UI_LabelStyle_italic_feature"), style -> ((LabelStyle) style).isItalic(), (style, newItalic) -> ((LabelStyle) style).setItalic(newItalic), ViewPackage.Literals.LABEL_STYLE__ITALIC, Optional.empty()); controls.add(italic); - var bold = this.propertiesWidgetCreationService.createCheckbox("nodestyle.bold", "Bold", + var bold = this.propertiesWidgetCreationService.createCheckbox("nodestyle.bold", + DiagramEditPlugin.INSTANCE.getString("_UI_LabelStyle_bold_feature"), style -> ((LabelStyle) style).isBold(), (style, newBold) -> ((LabelStyle) style).setBold(newBold), ViewPackage.Literals.LABEL_STYLE__BOLD, Optional.empty()); controls.add(bold); - var underline = this.propertiesWidgetCreationService.createCheckbox("nodestyle.underline", "Underline", + var underline = this.propertiesWidgetCreationService.createCheckbox("nodestyle.underline", + DiagramEditPlugin.INSTANCE.getString("_UI_LabelStyle_underline_feature"), style -> ((LabelStyle) style).isUnderline(), (style, newUnderline) -> ((LabelStyle) style).setUnderline(newUnderline), ViewPackage.Literals.LABEL_STYLE__UNDERLINE, Optional.empty()); controls.add(underline); - var strikeThrough = this.propertiesWidgetCreationService.createCheckbox("nodestyle.strikeThrough", "Strike Through", + var strikeThrough = this.propertiesWidgetCreationService.createCheckbox("nodestyle.strikeThrough", + DiagramEditPlugin.INSTANCE.getString("_UI_LabelStyle_strikeThrough_feature"), style -> ((LabelStyle) style).isStrikeThrough(), (style, newStrikeThrough) -> ((LabelStyle) style).setStrikeThrough(newStrikeThrough), ViewPackage.Literals.LABEL_STYLE__STRIKE_THROUGH, Optional.empty()); controls.add(strikeThrough); - var showIcon = this.propertiesWidgetCreationService.createCheckbox("nodestyle.showIcon", "Show Icon", + var showIcon = this.propertiesWidgetCreationService.createCheckbox("nodestyle.showIcon", + DiagramEditPlugin.INSTANCE.getString("_UI_EdgeStyle_showIcon_feature"), style -> ((EdgeStyle) style).isShowIcon(), (style, newValue) -> ((EdgeStyle) style).setShowIcon(newValue), DiagramPackage.Literals.EDGE_STYLE__SHOW_ICON, @@ -148,7 +156,10 @@ private List getGeneralControlDescription() { controls.add(this.createTargetArrowStyleSelectionField()); Function> colorOptionsProvider = variableManager -> this.getColorsFromColorPalettesStream(variableManager).toList(); - var userColor = this.propertiesWidgetCreationService.createReferenceWidget("edgestyle.Color", "Color", DiagramPackage.Literals.STYLE__COLOR, colorOptionsProvider); + var userColor = this.propertiesWidgetCreationService.createReferenceWidget("edgestyle.Color", + DiagramEditPlugin.INSTANCE.getString("_UI_Style_color_feature"), + DiagramPackage.Literals.STYLE__COLOR, + colorOptionsProvider); controls.add(userColor); var background = this.propertiesWidgetCreationService.createReferenceWidget("edgestyle.Background", "Background", DiagramPackage.Literals.EDGE_STYLE__BACKGROUND, colorOptionsProvider); @@ -208,7 +219,7 @@ private SelectDescription createSourceArrowStyleSelectionField() { return SelectDescription.newSelectDescription("edgestyle.sourceArrowStyleSelector") .idProvider(variableManager -> "edgestyle.sourceArrowStyleSelector") .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) - .labelProvider(variableManager -> "Source Arrow Syle") + .labelProvider(variableManager -> DiagramEditPlugin.INSTANCE.getString("_UI_EdgeStyle_sourceArrowStyle_feature")) .styleProvider(vm -> SelectStyle.newSelectStyle().showIcon(true).build()) .valueProvider(variableManager -> variableManager.get(VariableManager.SELF, EdgeStyle.class).map(EdgeStyle::getSourceArrowStyle) .map(ArrowStyle::getValue) @@ -220,7 +231,7 @@ private SelectDescription createSourceArrowStyleSelectionField() { .map(String::valueOf) .orElse(EMPTY)) .optionLabelProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, ArrowStyle.class) - .map(Enumerator::getName) + .map(literal -> DiagramEditPlugin.INSTANCE.getString("_UI_ArrowStyle_" + literal.getName() + LITERAL)) .orElse(EMPTY)) .optionIconURLProvider(variableManager -> List.of()) .newValueHandler(this.getSourceArrowValueHandler()) @@ -249,7 +260,7 @@ private SelectDescription createTargetArrowStyleSelectionField() { return SelectDescription.newSelectDescription("edgestyle.targetArrowStyleSelector") .idProvider(variableManager -> "edgestyle.targetArrowStyleSelector") .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) - .labelProvider(variableManager -> "Target Arrow Syle") + .labelProvider(variableManager -> DiagramEditPlugin.INSTANCE.getString("_UI_EdgeStyle_targetArrowStyle_feature")) .styleProvider(vm -> SelectStyle.newSelectStyle().showIcon(true).build()) .valueProvider(variableManager -> variableManager.get(VariableManager.SELF, EdgeStyle.class).map(EdgeStyle::getTargetArrowStyle) .map(ArrowStyle::getValue) @@ -261,7 +272,7 @@ private SelectDescription createTargetArrowStyleSelectionField() { .map(String::valueOf) .orElse(EMPTY)) .optionLabelProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, ArrowStyle.class) - .map(Enumerator::getName) + .map(literal -> DiagramEditPlugin.INSTANCE.getString("_UI_ArrowStyle_" + literal.getName() + LITERAL)) .orElse(EMPTY)) .optionIconURLProvider(variableManager -> List.of()) .newValueHandler(this.getTargetArrowValueHandler()) @@ -290,7 +301,7 @@ private SelectDescription createLineStyleSelectionField() { return SelectDescription.newSelectDescription("edgestyle.lineStyleSelector") .idProvider(variableManager -> "edgestyle.lineStyleSelector") .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) - .labelProvider(variableManager -> "Line Syle") + .labelProvider(variableManager -> DiagramEditPlugin.INSTANCE.getString("_UI_EdgeStyle_lineStyle_feature")) .styleProvider(vm -> SelectStyle.newSelectStyle().showIcon(true).build()) .valueProvider(variableManager -> variableManager.get(VariableManager.SELF, EdgeStyle.class).map(EdgeStyle::getLineStyle) .map(LineStyle::getValue) @@ -302,7 +313,7 @@ private SelectDescription createLineStyleSelectionField() { .map(String::valueOf) .orElse(EMPTY)) .optionLabelProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, LineStyle.class) - .map(Enumerator::getName) + .map(literal -> DiagramEditPlugin.INSTANCE.getString("_UI_LineStyle_" + literal.getName() + LITERAL)) .orElse(EMPTY)) .optionIconURLProvider(variableManager -> List.of()) .newValueHandler(this.getLineStyleValueHandler()) @@ -331,7 +342,7 @@ private SelectDescription createIconSelectionField() { return SelectDescription.newSelectDescription("edgestyle.iconLabelSelector") .idProvider(variableManager -> "edgestyle.iconLabelSelector") .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) - .labelProvider(variableManager -> "Custom Icon") + .labelProvider(variableManager -> DiagramEditPlugin.INSTANCE.getString("_UI_EdgeStyle_labelIcon_feature")) .styleProvider(vm -> SelectStyle.newSelectStyle().showIcon(true).build()) .valueProvider(variableManager -> variableManager.get(VariableManager.SELF, EdgeStyle.class).map(EdgeStyle::getLabelIcon).orElse(EMPTY)) .optionsProvider(variableManager -> variableManager.get(IEditingContext.EDITING_CONTEXT, IEditingContext.class) diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/NodeStylePropertiesConfigurer.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/NodeStylePropertiesConfigurer.java index 4e34701ab7a..3e6abe02fc6 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/NodeStylePropertiesConfigurer.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/NodeStylePropertiesConfigurer.java @@ -36,6 +36,7 @@ import org.eclipse.sirius.components.core.api.IObjectService; import org.eclipse.sirius.components.diagrams.NodeType; import org.eclipse.sirius.components.emf.services.api.IEMFEditingContext; +import org.eclipse.sirius.components.emf.services.messages.IEMFMessageService; import org.eclipse.sirius.components.forms.components.SelectComponent; import org.eclipse.sirius.components.forms.description.AbstractControlDescription; import org.eclipse.sirius.components.forms.description.GroupDescription; @@ -58,6 +59,7 @@ import org.eclipse.sirius.components.view.diagram.NodeDescription; import org.eclipse.sirius.components.view.diagram.NodeStyleDescription; import org.eclipse.sirius.components.view.diagram.RectangularNodeStyleDescription; +import org.eclipse.sirius.components.view.diagram.provider.DiagramEditPlugin; import org.eclipse.sirius.components.view.emf.api.CustomImageMetadata; import org.eclipse.sirius.components.view.emf.api.ICustomImageMetadataSearchService; import org.eclipse.sirius.components.view.emf.compatibility.IPropertiesConfigurerService; @@ -78,14 +80,16 @@ public class NodeStylePropertiesConfigurer implements IPropertiesDescriptionRegi private final IPropertiesConfigurerService propertiesConfigurerService; private final IPropertiesWidgetCreationService propertiesWidgetCreationService; private final IObjectService objectService; + private final IEMFMessageService emfMessageService; public NodeStylePropertiesConfigurer(ICustomImageMetadataSearchService customImageSearchService, - List parametricSVGImageRegistries, PropertiesConfigurerService propertiesConfigurerService, IPropertiesWidgetCreationService propertiesWidgetCreationService, IObjectService objectService) { + List parametricSVGImageRegistries, PropertiesConfigurerService propertiesConfigurerService, IPropertiesWidgetCreationService propertiesWidgetCreationService, IObjectService objectService, IEMFMessageService emfMessageService) { this.customImageSearchService = Objects.requireNonNull(customImageSearchService); this.parametricSVGImageRegistries = parametricSVGImageRegistries; this.propertiesConfigurerService = Objects.requireNonNull(propertiesConfigurerService); this.propertiesWidgetCreationService = Objects.requireNonNull(propertiesWidgetCreationService); this.objectService = Objects.requireNonNull(objectService); + this.emfMessageService = Objects.requireNonNull(emfMessageService); } @Override @@ -101,26 +105,26 @@ private PageDescription getListLayoutStrategyProperties() { List controls = new ArrayList<>(); var areChildNodesDraggableExpression = this.propertiesWidgetCreationService.createExpressionField("listLayoutStrategy.areChildNodesDraggableExpression", - "Are Child Nodes Draggable Expression", + DiagramEditPlugin.INSTANCE.getString("_UI_ListLayoutStrategyDescription_areChildNodesDraggableExpression_feature"), desc -> String.valueOf(((ListLayoutStrategyDescription) desc).getAreChildNodesDraggableExpression()), (desc, newValue) -> ((ListLayoutStrategyDescription) desc).setAreChildNodesDraggableExpression(newValue), DiagramPackage.Literals.LIST_LAYOUT_STRATEGY_DESCRIPTION__ARE_CHILD_NODES_DRAGGABLE_EXPRESSION); controls.add(areChildNodesDraggableExpression); var topGapExpression = this.propertiesWidgetCreationService.createExpressionField("listLayoutStrategy.topGapExpression", - "Top Gap Expression", + DiagramEditPlugin.INSTANCE.getString("_UI_ListLayoutStrategyDescription_topGapExpression_feature"), desc -> String.valueOf(((ListLayoutStrategyDescription) desc).getTopGapExpression()), (desc, newValue) -> ((ListLayoutStrategyDescription) desc).setTopGapExpression(newValue), DiagramPackage.Literals.LIST_LAYOUT_STRATEGY_DESCRIPTION__TOP_GAP_EXPRESSION); controls.add(topGapExpression); var bottomGapExpression = this.propertiesWidgetCreationService.createExpressionField("listLayoutStrategy.bottomGapExpression", - "Bottom Gap Expression", + DiagramEditPlugin.INSTANCE.getString("_UI_ListLayoutStrategyDescription_bottomGapExpression_feature"), desc -> String.valueOf(((ListLayoutStrategyDescription) desc).getBottomGapExpression()), (desc, newValue) -> ((ListLayoutStrategyDescription) desc).setBottomGapExpression(newValue), DiagramPackage.Literals.LIST_LAYOUT_STRATEGY_DESCRIPTION__BOTTOM_GAP_EXPRESSION); controls.add(bottomGapExpression); var growableNodes = this.propertiesWidgetCreationService.createReferenceWidget("listLayoutStrategy.growableNodes", - "Growable Nodes", + DiagramEditPlugin.INSTANCE.getString("_UI_ListLayoutStrategyDescription_growableNodes_feature"), DiagramPackage.Literals.LIST_LAYOUT_STRATEGY_DESCRIPTION__GROWABLE_NODES, this::getSubNodes); controls.add(growableNodes); @@ -150,7 +154,8 @@ private PageDescription getImageNodeStyleProperties() { controls.add(this.createShapeSelectionField()); controls.add(this.createShapePreviewField()); controls.addAll(this.getGeneralControlDescription(NodeType.NODE_IMAGE)); - var isPositionDependentRotation = this.propertiesWidgetCreationService.createCheckbox("nodestyle.positionDependentRotation", "Position-Dependent Rotation", + var isPositionDependentRotation = this.propertiesWidgetCreationService.createCheckbox("nodestyle.positionDependentRotation", + DiagramEditPlugin.INSTANCE.getString("_UI_ImageNodeStyleDescription_positionDependentRotation_feature"), style -> ((ImageNodeStyleDescription) style).isPositionDependentRotation(), (style, newValue) -> ((ImageNodeStyleDescription) style).setPositionDependentRotation(newValue), DiagramPackage.Literals.IMAGE_NODE_STYLE_DESCRIPTION__POSITION_DEPENDENT_ROTATION, @@ -202,18 +207,27 @@ private List getGeneralControlDescription(String nod Function> colorOptionsProvider = variableManager -> this.getColorsFromColorPalettesStream(variableManager).toList(); if (Objects.equals(nodeType, NodeType.NODE_RECTANGLE)) { - var color = this.propertiesWidgetCreationService.createReferenceWidget("rectangular.nodestyle.background", "Background", DiagramPackage.Literals.RECTANGULAR_NODE_STYLE_DESCRIPTION__BACKGROUND, colorOptionsProvider); + var color = this.propertiesWidgetCreationService.createReferenceWidget("rectangular.nodestyle.background", + DiagramEditPlugin.INSTANCE.getString("_UI_RectangularNodeStyleDescription_background_feature"), + DiagramPackage.Literals.RECTANGULAR_NODE_STYLE_DESCRIPTION__BACKGROUND, + colorOptionsProvider); controls.add(color); } if (Objects.equals(nodeType, NodeType.NODE_ICON_LABEL)) { - var color = this.propertiesWidgetCreationService.createReferenceWidget("icon.nodestyle.background", "Background", DiagramPackage.Literals.ICON_LABEL_NODE_STYLE_DESCRIPTION__BACKGROUND, + var color = this.propertiesWidgetCreationService.createReferenceWidget("icon.nodestyle.background", + DiagramEditPlugin.INSTANCE.getString("_UI_IconLabelNodeStyleDescription_background_feature"), + DiagramPackage.Literals.ICON_LABEL_NODE_STYLE_DESCRIPTION__BACKGROUND, colorOptionsProvider); controls.add(color); } - var borderColor = this.propertiesWidgetCreationService.createReferenceWidget("nodestyle.borderColor", "Border Color", DiagramPackage.Literals.BORDER_STYLE__BORDER_COLOR, colorOptionsProvider); + var borderColor = this.propertiesWidgetCreationService.createReferenceWidget("nodestyle.borderColor", + DiagramEditPlugin.INSTANCE.getString("_UI_BorderStyle_borderColor_feature"), + DiagramPackage.Literals.BORDER_STYLE__BORDER_COLOR, + colorOptionsProvider); controls.add(borderColor); - var borderRadius = this.propertiesWidgetCreationService.createTextField("nodestyle.borderRadius", "Border Radius", + var borderRadius = this.propertiesWidgetCreationService.createTextField("nodestyle.borderRadius", + DiagramEditPlugin.INSTANCE.getString("_UI_BorderStyle_borderRadius_feature"), style -> String.valueOf(((NodeStyleDescription) style).getBorderRadius()), (style, newBorderRadius) -> { try { @@ -225,7 +239,8 @@ private List getGeneralControlDescription(String nod DiagramPackage.Literals.BORDER_STYLE__BORDER_RADIUS); controls.add(borderRadius); - var borderSize = this.propertiesWidgetCreationService.createTextField("nodestyle.borderSize", "Border Size", + var borderSize = this.propertiesWidgetCreationService.createTextField("nodestyle.borderSize", + DiagramEditPlugin.INSTANCE.getString("_UI_BorderStyle_borderSize_feature"), style -> String.valueOf(((NodeStyleDescription) style).getBorderSize()), (style, newBorderSize) -> { try { @@ -247,14 +262,16 @@ private SelectDescription createBorderLineStyleSelectionField() { return SelectDescription.newSelectDescription("nodestyle.borderstyle") .idProvider(variableManager -> "nodestyle.borderstyle") .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) - .labelProvider(variableManager -> "Border Line Style") + .labelProvider(variableManager -> DiagramEditPlugin.INSTANCE.getString("_UI_BorderStyle_borderLineStyle_feature")) .valueProvider(variableManager -> variableManager.get(VariableManager.SELF, BorderStyle.class) .map(BorderStyle::getBorderLineStyle) .map(LineStyle::toString) .orElse("")) .optionsProvider(variableManager -> LineStyle.VALUES.stream().toList()) .optionIdProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, LineStyle.class).map(LineStyle::getLiteral).orElse("")) - .optionLabelProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, LineStyle.class).map(LineStyle::getName).orElse("")) + .optionLabelProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, LineStyle.class) + .map(literal -> DiagramEditPlugin.INSTANCE.getString("_UI_LineStyle_" + literal.getName() + "_literal")) + .orElse("")) .optionIconURLProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, Object.class).map(this.objectService::getImagePath) .orElse(List.of())) .newValueHandler((variableManager, newValue) -> { @@ -300,7 +317,7 @@ private SelectDescription createShapeSelectionField() { return SelectDescription.newSelectDescription("nodestyle.shapeSelector") .idProvider(variableManager -> "nodestyle.shapeSelector") .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) - .labelProvider(variableManager -> "Shape") + .labelProvider(variableManager -> DiagramEditPlugin.INSTANCE.getString("_UI_ImageNodeStyleDescription_shape_feature")) .valueProvider(variableManager -> variableManager.get(VariableManager.SELF, ImageNodeStyleDescription.class).map(ImageNodeStyleDescription::getShape).orElse("")) .optionsProvider(variableManager -> { Optional optionalEditingContextId = variableManager.get(IEditingContext.EDITING_CONTEXT, IEditingContext.class).map(IEditingContext::getId); @@ -335,7 +352,7 @@ private ImageDescription createShapePreviewField() { return ImageDescription.newImageDescription("nodestyle.shapePreview") .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) .idProvider(variableManager -> "nodestyle.shapePreview") - .labelProvider(variableManager -> "Shape Preview") + .labelProvider(variableManager -> this.emfMessageService.shapePreview()) .urlProvider(variableManager -> variableManager.get(VariableManager.SELF, ImageNodeStyleDescription.class).map(ImageNodeStyleDescription::getShape).orElse("")) .maxWidthProvider(variableManager -> "300px") .diagnosticsProvider(variableManager -> List.of()) diff --git a/packages/view/backend/sirius-components-view-form-edit/src/main/resources/plugin_ru.properties b/packages/view/backend/sirius-components-view-form-edit/src/main/resources/plugin_ru.properties new file mode 100644 index 00000000000..e9bbf7713eb --- /dev/null +++ b/packages/view/backend/sirius-components-view-form-edit/src/main/resources/plugin_ru.properties @@ -0,0 +1,257 @@ +################################################################################ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation +################################################################################# +pluginName = Form Edit Support +providerName = www.example.org + +_UI_CreateChild_text = {0} +_UI_CreateChild_text2 = {1} "{0}" +_UI_CreateChild_text3 = {1} +_UI_CreateChild_tooltip = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" +_UI_CreateChild_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}". +_UI_CreateSibling_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0441\u043E\u0441\u0435\u0434\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}", \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u0438\u0445 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u043E\u0431\u044A\u0435\u043A\u0442\u0430. + +_UI_PropertyDescriptor_description = \u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E "{0}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{1}" + +_UI_FormDescription_type = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0444\u043E\u0440\u043C +_UI_FormVariable_type = \u041F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u0430\u044F +_UI_PageDescription_type = \u0421\u0442\u0440\u0430\u043D\u0438\u0446\u0430 +_UI_GroupDescription_type = \u0413\u0440\u0443\u043F\u043F\u0430 +_UI_FormElementDescription_type = \u042D\u043B\u0435\u043C\u0435\u043D\u0442 +_UI_WidgetDescription_type = \u041F\u043E\u043B\u0435 +_UI_BarChartDescription_type = \u0413\u0438\u0441\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u0430 +_UI_ButtonDescription_type = \u041A\u043D\u043E\u043F\u043A\u0430 +_UI_CheckboxDescription_type = \u0424\u043B\u0430\u0436\u043E\u043A +_UI_DateTimeDescription_type = \u0414\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F +_UI_FlexboxContainerDescription_type = \u041A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440 +_UI_ImageDescription_type = \u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 +_UI_LabelDescription_type = \u041D\u0430\u0434\u043F\u0438\u0441\u044C +_UI_LinkDescription_type = \u0421\u0441\u044B\u043B\u043A\u0430 +_UI_ListDescription_type = \u0421\u043F\u0438\u0441\u043E\u043A +_UI_MultiSelectDescription_type = \u041C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 \u0432\u044B\u0431\u043E\u0440 +_UI_PieChartDescription_type = \u041A\u0440\u0443\u0433\u043E\u0432\u0430\u044F \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u0430 +_UI_RadioDescription_type = \u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0430\u0442\u0435\u043B\u044C +_UI_RichTextDescription_type = \u0422\u0435\u043A\u0441\u0442 \u0441 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435\u043C +_UI_SelectDescription_type = \u0412\u044B\u043F\u0430\u0434\u0430\u044E\u0449\u0438\u0439 \u0441\u043F\u0438\u0441\u043E\u043A +_UI_SplitButtonDescription_type = \u041A\u043D\u043E\u043F\u043A\u0430 \u0441 \u0432\u044B\u043F\u0430\u0434\u0430\u044E\u0449\u0438\u043C \u0441\u043F\u0438\u0441\u043A\u043E\u043C +_UI_TextAreaDescription_type = \u041C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442 +_UI_TextfieldDescription_type = \u0422\u0435\u043A\u0441\u0442\u043E\u0432\u043E\u0435 \u043F\u043E\u043B\u0435 +_UI_TreeDescription_type = \u0414\u0435\u0440\u0435\u0432\u043E +_UI_SliderDescription_type = \u041F\u043E\u043B\u0437\u0443\u043D\u043E\u043A +_UI_WidgetDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C \u043F\u043E\u043B\u044F +_UI_BarChartDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C \u0433\u0438\u0441\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u044B +_UI_ConditionalBarChartDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u0433\u0438\u0441\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u044B +_UI_ButtonDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C \u043A\u043D\u043E\u043F\u043A\u0438 +_UI_ConditionalButtonDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u043A\u043D\u043E\u043F\u043A\u0438 +_UI_CheckboxDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C \u0444\u043B\u0430\u0436\u043A\u0430 +_UI_ConditionalCheckboxDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u0444\u043B\u0430\u0436\u043A\u0430 +_UI_DateTimeDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C \u0434\u0430\u0442\u044B \u0438 \u0432\u0440\u0435\u043C\u0435\u043D\u0438 +_UI_ConditionalDateTimeDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u0434\u0430\u0442\u044B \u0438 \u0432\u0440\u0435\u043C\u0435\u043D\u0438 +_UI_LabelDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_ConditionalLabelDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_LinkDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C \u0441\u0441\u044B\u043B\u043A\u0438 +_UI_ConditionalLinkDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u0441\u0441\u044B\u043B\u043A\u0438 +_UI_ListDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C \u0441\u043F\u0438\u0441\u043A\u0430 +_UI_ConditionalListDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u0441\u043F\u0438\u0441\u043A\u0430 +_UI_MultiSelectDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C \u043C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0433\u043E \u0432\u044B\u0431\u043E\u0440\u0430 +_UI_ConditionalMultiSelectDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u043C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0433\u043E \u0432\u044B\u0431\u043E\u0440\u0430 +_UI_PieChartDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C \u043A\u0440\u0443\u0433\u043E\u0432\u043E\u0439 \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B +_UI_ConditionalPieChartDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u043A\u0440\u0443\u0433\u043E\u0432\u043E\u0439 \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B +_UI_RadioDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0430\u0442\u0435\u043B\u044F +_UI_ConditionalRadioDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0430\u0442\u0435\u043B\u044F +_UI_SelectDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C \u0432\u044B\u043F\u0430\u0434\u0430\u044E\u0449\u0435\u0433\u043E \u0441\u043F\u0438\u0441\u043A\u0430 +_UI_ConditionalSelectDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u0432\u044B\u043F\u0430\u0434\u0430\u044E\u0449\u0435\u0433\u043E \u0441\u043F\u0438\u0441\u043A\u0430 +_UI_TextareaDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u043E\u0433\u043E \u0442\u0435\u043A\u0441\u0442\u0430 +_UI_ConditionalTextareaDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u043E\u0433\u043E \u0442\u0435\u043A\u0441\u0442\u0430 +_UI_TextfieldDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C \u0442\u0435\u043A\u0441\u0442\u043E\u0432\u043E\u0433\u043E \u043F\u043E\u043B\u044F +_UI_ConditionalTextfieldDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u0442\u0435\u043A\u0441\u0442\u043E\u0432\u043E\u0433\u043E \u043F\u043E\u043B\u044F +_UI_ContainerBorderStyle_type = \u0421\u0442\u0438\u043B\u044C \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0430 +_UI_ConditionalContainerBorderStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0430 +_UI_FormElementFor_type = \u0426\u0438\u043A\u043B +_UI_FormElementIf_type = \u0423\u0441\u043B\u043E\u0432\u0438\u0435 +_UI_Unknown_type = \u041E\u0431\u044A\u0435\u043A\u0442 + +_UI_Unknown_datatype= \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 + +_UI_FormDescription_pages_feature = \u0421\u0442\u0440\u0430\u043D\u0438\u0446\u044B +_UI_FormDescription_formVariables_feature = \u041F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0435 +_UI_FormVariable_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_FormVariable_defaultValueExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_PageDescription_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_PageDescription_labelExpression_feature = \u041D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_PageDescription_domainType_feature = \u0422\u0438\u043F +_UI_PageDescription_semanticCandidatesExpression_feature = \u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_PageDescription_preconditionExpression_feature = \u041F\u0440\u0435\u0434\u0443\u0441\u043B\u043E\u0432\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_PageDescription_groups_feature = \u0413\u0440\u0443\u043F\u043F\u044B +_UI_PageDescription_toolbarActions_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u043D\u0430 \u043F\u0430\u043D\u0435\u043B\u0438 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 +_UI_GroupDescription_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_GroupDescription_labelExpression_feature = \u041D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_GroupDescription_displayMode_feature = \u0420\u0435\u0436\u0438\u043C \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F +_UI_GroupDescription_semanticCandidatesExpression_feature = \u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_GroupDescription_toolbarActions_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u043D\u0430 \u043F\u0430\u043D\u0435\u043B\u0438 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 +_UI_GroupDescription_children_feature = \u041F\u043E\u043B\u044F +_UI_GroupDescription_borderStyle_feature = \u0421\u0442\u0438\u043B\u044C \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_GroupDescription_conditionalBorderStyles_feature =\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_FormElementDescription_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_WidgetDescription_labelExpression_feature = \u041D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_WidgetDescription_helpExpression_feature = \u041F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0430 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_BarChartDescription_valuesExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u044F (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_BarChartDescription_keysExpression_feature = \u041A\u043B\u044E\u0447\u0438 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_BarChartDescription_yAxisLabelExpression_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u043E\u0439 \u043E\u0441\u0438 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_BarChartDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_BarChartDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_BarChartDescription_width_feature = \u0428\u0438\u0440\u0438\u043D\u0430 +_UI_BarChartDescription_height_feature = \u0412\u044B\u0441\u043E\u0442\u0430 +_UI_ButtonDescription_buttonLabelExpression_feature = \u041D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_ButtonDescription_body_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_ButtonDescription_imageExpression_feature = \u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_ButtonDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_ButtonDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_ButtonDescription_IsEnabledExpression_feature = \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_CheckboxDescription_valueExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_CheckboxDescription_body_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_CheckboxDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_CheckboxDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_CheckboxDescription_IsEnabledExpression_feature = \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_DateTimeDescription_stringValueExpression_feature = \u0421\u0442\u0440\u043E\u043A\u043E\u0432\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_DateTimeDescription_body_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_DateTimeDescription_isEnabledExpression_feature = \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_DateTimeDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_DateTimeDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_DateTimeDescription_type_feature = \u0422\u0438\u043F +_UI_FlexboxContainerDescription_children_feature = \u0414\u043E\u0447\u0435\u0440\u043D\u0438\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B +_UI_FlexboxContainerDescription_flexDirection_feature = \u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 +_UI_FlexboxContainerDescription_IsEnabledExpression_feature = \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_FlexboxContainerDescription_borderStyle_feature = \u0421\u0442\u0438\u043B\u044C \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_FlexboxContainerDescription_conditionalBorderStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_ImageDescription_urlExpression_feature = \u0410\u0434\u0440\u0435\u0441 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_ImageDescription_maxWidthExpression_feature = \u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_LabelDescription_valueExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_LabelDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_LabelDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_LinkDescription_valueExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_LinkDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_LinkDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_ListDescription_valueExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_ListDescription_displayExpression_feature = \u041D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_ListDescription_isDeletableExpression_feature = \u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u043E \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_ListDescription_body_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_ListDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_ListDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_ListDescription_IsEnabledExpression_feature = \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_MultiSelectDescription_valueExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_MultiSelectDescription_candidatesExpression_feature = \u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_MultiSelectDescription_candidateLabelExpression_feature = \u041D\u0430\u0434\u043F\u0438\u0441\u044C \u0434\u043B\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_MultiSelectDescription_body_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_MultiSelectDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_MultiSelectDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_MultiSelectDescription_IsEnabledExpression_feature = \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_PieChartDescription_valuesExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u044F (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_PieChartDescription_keysExpression_feature = \u041A\u043B\u044E\u0447\u0438 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_PieChartDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_PieChartDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_RadioDescription_valueExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_RadioDescription_candidatesExpression_feature = \u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_RadioDescription_candidateLabelExpression_feature = \u041D\u0430\u0434\u043F\u0438\u0441\u044C \u0434\u043B\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_RadioDescription_body_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_RadioDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_RadioDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_RadioDescription_IsEnabledExpression_feature = \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_RichTextDescription_valueExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_RichTextDescription_body_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_RichTextDescription_IsEnabledExpression_feature = \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_SelectDescription_valueExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_SelectDescription_candidatesExpression_feature = \u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_SelectDescription_candidateLabelExpression_feature = \u041D\u0430\u0434\u043F\u0438\u0441\u044C \u0434\u043B\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_SelectDescription_body_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_SelectDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_SelectDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_SelectDescription_IsEnabledExpression_feature = \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_SplitButtonDescription_actions_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F +_UI_SplitButtonDescription_IsEnabledExpression_feature = \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TextAreaDescription_valueExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TextAreaDescription_body_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_TextAreaDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_TextAreaDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_TextAreaDescription_IsEnabledExpression_feature = \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TextfieldDescription_valueExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TextfieldDescription_body_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_TextfieldDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_TextfieldDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_TextfieldDescription_IsEnabledExpression_feature = \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TreeDescription_childrenExpression_feature = \u0414\u043E\u0447\u0435\u0440\u043D\u0438\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TreeDescription_treeItemLabelExpression_feature = \u041D\u0430\u0434\u043F\u0438\u0441\u044C \u0434\u043B\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TreeDescription_isTreeItemSelectableExpression_feature = \u041C\u043E\u0436\u0435\u0442 \u043B\u0438 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0431\u044B\u0442\u044C \u0432\u044B\u0431\u0440\u0430\u043D (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TreeDescription_treeItemBeginIconExpression_feature = \u041D\u0430\u0447\u0430\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TreeDescription_treeItemEndIconsExpression_feature = \u041A\u043E\u043D\u0435\u0447\u043D\u044B\u0439 \u0437\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TreeDescription_isCheckableExpression_feature = \u041C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043E\u0442\u043C\u0435\u0447\u0435\u043D \u0444\u043B\u0430\u0436\u043A\u043E\u043C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TreeDescription_checkedValueExpression_feature = \u041E\u0442\u043C\u0435\u0447\u0435\u043D \u0444\u043B\u0430\u0436\u043A\u043E\u043C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TreeDescription_IsEnabledExpression_feature = \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TreeDescription_body_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_SliderDescription_minValueExpression_feature = \u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_SliderDescription_maxValueExpression_feature = \u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_SliderDescription_currentValueExpression_feature = \u0422\u0435\u043A\u0443\u0449\u0435\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_SliderDescription_body_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_SliderDescription_isEnabledExpression_feature = \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_BarChartDescriptionStyle_barsColor_feature = \u0426\u0432\u0435\u0442 \u0441\u0442\u043E\u043B\u0431\u0446\u043E\u0432 +_UI_ButtonDescriptionStyle_backgroundColor_feature = \u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_ButtonDescriptionStyle_foregroundColor_feature = \u0426\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430 +_UI_CheckboxDescriptionStyle_color_feature = \u0426\u0432\u0435\u0442 +_UI_CheckboxDescriptionStyle_labelPlacement_feature = \u0420\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_DateTimeDescriptionStyle_backgroundColor_feature = \u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_DateTimeDescriptionStyle_foregroundColor_feature = \u0426\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430 +_UI_DateTimeDescriptionStyle_italic_feature = \u041A\u0443\u0440\u0441\u0438\u0432 +_UI_DateTimeDescriptionStyle_bold_feature = \u041F\u043E\u043B\u0443\u0436\u0438\u0440\u043D\u044B\u0439 +_UI_LabelDescriptionStyle_color_feature = \u0426\u0432\u0435\u0442 +_UI_LinkDescriptionStyle_color_feature = \u0426\u0432\u0435\u0442 +_UI_ListDescriptionStyle_color_feature = \u0426\u0432\u0435\u0442 +_UI_MultiSelectDescriptionStyle_backgroundColor_feature = \u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_MultiSelectDescriptionStyle_foregroundColor_feature = \u0426\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430 +_UI_MultiSelectDescriptionStyle_showIcon_feature = \u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u043E\u043A +_UI_PieChartDescriptionStyle_colors_feature = \u0426\u0432\u0435\u0442\u0430 +_UI_PieChartDescriptionStyle_strokeWidth_feature = \u0422\u043E\u043B\u0449\u0438\u043D\u0430 \u043B\u0438\u043D\u0438\u0439 +_UI_PieChartDescriptionStyle_strokeColor_feature = \u0426\u0432\u0438\u0442 \u043B\u0438\u043D\u0438\u0439 +_UI_RadioDescriptionStyle_color_feature = \u0426\u0432\u0435\u0442 +_UI_SelectDescriptionStyle_backgroundColor_feature = \u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_SelectDescriptionStyle_foregroundColor_feature = \u0426\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430 +_UI_SelectDescriptionStyle_showIcon_feature = \u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u043E\u043A +_UI_TextareaDescriptionStyle_backgroundColor_feature = \u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_TextareaDescriptionStyle_foregroundColor_feature = \u0426\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430 +_UI_TextfieldDescriptionStyle_backgroundColor_feature = \u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_TextfieldDescriptionStyle_foregroundColor_feature = \u0426\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430 +_UI_ContainerBorderStyle_borderColor_feature = \u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_ContainerBorderStyle_borderRadius_feature = \u0420\u0430\u0434\u0438\u0443\u0441 \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_ContainerBorderStyle_borderSize_feature = \u0422\u043E\u043B\u0449\u0438\u043D\u0430 \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_ContainerBorderStyle_borderLineStyle_feature = \u0421\u0442\u0438\u043B\u044C \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_FormElementFor_iterator_feature = \u0418\u0442\u0435\u0440\u0430\u0442\u043E\u0440 +_UI_FormElementFor_iterableExpression_feature = \u041A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_FormElementFor_children_feature = \u0414\u043E\u0447\u0435\u0440\u043D\u0438\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B +_UI_FormElementIf_predicateExpression_feature = \u0423\u0441\u043B\u043E\u0432\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_FormElementIf_children_feature = \u0414\u043E\u0447\u0435\u0440\u043D\u0438\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B +_UI_Unknown_feature = \u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E + +_UI_FlexDirection_row_literal = \u0441\u0442\u0440\u043E\u043A\u0430 +_UI_FlexDirection_rowReverse_literal = \u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u043E\u0431\u0440\u0430\u0442\u043D\u043E\u043C \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0438 +_UI_FlexDirection_column_literal = \u0441\u0442\u043E\u043B\u0431\u0435\u0446 +_UI_FlexDirection_columnReverse_literal = \u0441\u0442\u043E\u043B\u0431\u0435\u0446 \u0432 \u043E\u0431\u0440\u0430\u0442\u043D\u043E\u043C \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0438 +_UI_GroupDisplayMode_LIST_literal = \u0441\u043F\u0438\u0441\u043E\u043A +_UI_GroupDisplayMode_TOGGLEABLE_AREAS_literal = \u0441\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043C\u044B\u0435 \u043E\u0431\u043B\u0430\u0441\u0442\u0438 +_UI_LabelPlacement_end_literal = \u0432 \u043A\u043E\u043D\u0446\u0435 +_UI_LabelPlacement_top_literal = \u0441\u0432\u0435\u0440\u0445\u0443 +_UI_LabelPlacement_start_literal = \u0432 \u043D\u0430\u0447\u0430\u043B\u0435 +_UI_LabelPlacement_bottom_literal = \u0441\u043D\u0438\u0437\u0443 +_UI_ContainerBorderLineStyle_Solid_literal = \u0441\u043F\u043B\u043E\u0448\u043D\u0430\u044F +_UI_ContainerBorderLineStyle_Dashed_literal = \u0448\u0442\u0440\u0438\u0445\u043E\u0432\u0430\u044F +_UI_ContainerBorderLineStyle_Dotted_literal = \u043F\u0443\u043D\u043A\u0442\u0438\u0440\u043D\u0430\u044F +_UI_DateTimeType_DATE_TIME_literal = \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F +_UI_DateTimeType_DATE_literal = \u0434\u0430\u0442\u0430 +_UI_DateTimeType_TIME_literal = \u0432\u0440\u0435\u043C\u044F diff --git a/packages/view/backend/sirius-components-view-gantt-edit/src/main/resources/plugin_ru.properties b/packages/view/backend/sirius-components-view-gantt-edit/src/main/resources/plugin_ru.properties new file mode 100644 index 00000000000..9ae05392746 --- /dev/null +++ b/packages/view/backend/sirius-components-view-gantt-edit/src/main/resources/plugin_ru.properties @@ -0,0 +1,66 @@ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation + +pluginName = Gantt Edit Support +providerName = www.example.org + +_UI_CreateChild_text = {0} +_UI_CreateChild_text2 = {1} "{0}" +_UI_CreateChild_text3 = {1} +_UI_CreateChild_tooltip = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" +_UI_CreateChild_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}". +_UI_CreateSibling_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0441\u043E\u0441\u0435\u0434\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}", \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u0438\u0445 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u043E\u0431\u044A\u0435\u043A\u0442\u0430. + +_UI_PropertyDescriptor_description = \u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E "{0}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{1}" + +_UI_GanttDescription_type = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C \u0413\u0430\u043D\u0442\u0430 +_UI_TaskDescription_type = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0437\u0430\u0434\u0430\u0447 +_UI_TaskStyleDescription_type = \u0421\u0442\u0438\u043B\u044C \u0437\u0430\u0434\u0430\u0447\u0438 +_UI_ConditionalTaskStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u0437\u0430\u0434\u0430\u0447\u0438 +_UI_TaskTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u0447 +_UI_CreateTaskTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u0437\u0430\u0434\u0430\u0447 +_UI_EditTaskTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0437\u0430\u0434\u0430\u0447 +_UI_DeleteTaskTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0437\u0430\u0434\u0430\u0447 +_UI_DropTaskTool_type= \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u0437\u0430\u0434\u0430\u0447 +_UI_CreateTaskDependencyTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u0435\u0439 \u043C\u0435\u0436\u0434\u0443 \u0437\u0430\u0434\u0430\u0447\u0430\u043C\u0438 +_UI_Unknown_type = \u041E\u0431\u044A\u0435\u043A\u0442 + +_UI_Unknown_datatype= \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 + +_UI_GanttDescription_taskElementDescriptions_feature = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 \u0437\u0430\u0434\u0430\u0447 +_UI_GanttDescription_backgroundColor_feature = \u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_GanttDescription_createTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F +_UI_GanttDescription_editTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F +_UI_GanttDescription_deleteTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F +_UI_GanttDescription_dropTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F +_UI_GanttDescription_createTaskDependencyTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u0435\u0439 \u043C\u0435\u0436\u0434\u0443 \u0437\u0430\u0434\u0430\u0447\u0430\u043C\u0438 +_UI_TaskDescription_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_TaskDescription_domainType_feature = \u0422\u0438\u043F +_UI_TaskDescription_semanticCandidatesExpression_feature = \u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TaskDescription_nameExpression_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TaskDescription_descriptionExpression_feature = \u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TaskDescription_startTimeExpression_feature = \u041D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0435 \u0432\u0440\u0435\u043C\u044F (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TaskDescription_endTimeExpression_feature = \u041A\u043E\u043D\u0435\u0447\u043D\u043E\u0435 \u0432\u0440\u0435\u043C\u044F (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TaskDescription_progressExpression_feature = \u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TaskDescription_computeStartEndDynamicallyExpression_feature = \u0412\u044B\u0447\u0438\u0441\u043B\u044F\u0442\u044C \u043D\u0430\u0447\u0430\u043B\u043E \u0438 \u043A\u043E\u043D\u0435\u0446 \u0434\u0438\u043D\u0430\u043C\u0438\u0447\u0435\u0441\u043A\u0438 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TaskDescription_taskDependenciesExpression_feature = \u0417\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TaskDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_TaskDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_TaskDescription_subTaskElementDescriptions_feature = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 \u043F\u043E\u0434\u0437\u0430\u0434\u0430\u0447 +_UI_TaskDescription_reusedTaskElementDescriptions_feature = \u041F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0435 \u0441\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 \u0437\u0430\u0434\u0430\u0447 +_UI_TaskStyleDescription_labelColorExpression_feature = \u0426\u0432\u0435\u0442 \u043D\u0430\u0434\u043F\u0438\u0441\u0438 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TaskStyleDescription_backgroundColorExpression_feature = \u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_TaskStyleDescription_progressColorExpression_feature = \u0426\u0432\u0435\u0442 \u043F\u0440\u043E\u0433\u0440\u0435\u0441\u0441\u0430 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_ConditionalTaskStyle_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_TaskTool_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_TaskTool_body_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_Unknown_feature = \u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E + diff --git a/packages/view/backend/sirius-components-widget-reference-view-edit/src/main/resources/plugin_ru.properties b/packages/view/backend/sirius-components-widget-reference-view-edit/src/main/resources/plugin_ru.properties new file mode 100644 index 00000000000..e9beeb7b081 --- /dev/null +++ b/packages/view/backend/sirius-components-widget-reference-view-edit/src/main/resources/plugin_ru.properties @@ -0,0 +1,35 @@ +################################################################################ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation +################################################################################# +pluginName = Reference Model Edit Support +providerName = www.example.org +_UI_CreateChild_text = {0} +_UI_CreateChild_text2 = {1} "{0}" +_UI_CreateChild_text3 = {1} +_UI_CreateChild_tooltip = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" +_UI_CreateChild_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}". +_UI_CreateSibling_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0441\u043E\u0441\u0435\u0434\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}", \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u0438\u0445 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u043E\u0431\u044A\u0435\u043A\u0442\u0430. +_UI_PropertyDescriptor_description = \u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E "{0}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{1}" +_UI_ReferenceWidgetDescription_type = \u0421\u0441\u044B\u043B\u043A\u0430 \u043D\u0430 \u043E\u0431\u044A\u0435\u043A\u0442 +_UI_ReferenceWidgetDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C \u0441\u0441\u044B\u043B\u043A\u0438 \u043D\u0430 \u043E\u0431\u044A\u0435\u043A\u0442 +_UI_ConditionalReferenceWidgetDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u0441\u0441\u044B\u043B\u043A\u0438 \u043D\u0430 \u043E\u0431\u044A\u0435\u043A\u0442 +_UI_Unknown_type = \u041E\u0431\u044A\u0435\u043A\u0442 +_UI_Unknown_datatype = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 +_UI_ReferenceWidgetDescription_isEnabledExpression_feature = \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_ReferenceWidgetDescription_referenceOwnerExpression_feature = \u041E\u0431\u044A\u0435\u043A\u0442, \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0441\u0441\u044B\u043B\u043A\u0443 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_ReferenceWidgetDescription_referenceNameExpression_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0441\u044B\u043B\u043A\u0438 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_ReferenceWidgetDescription_body_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_ReferenceWidgetDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_ReferenceWidgetDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C +_UI_ReferenceWidgetDescriptionStyle_color_feature = \u0426\u0432\u0435\u0442 +_UI_Unknown_feature = \u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E +