# HG changeset patch # User Claus Gittinger # Date 1516138280 -3600 # Node ID 2a319ce123194c41a48d12a4a3c42e4b1d59110e # Parent fda84ae10fee9ed2483d6aafdd53cbd155a49bb2 flyByHelpSpec -> helpSpec diff -r fda84ae10fee -r 2a319ce12319 Tools__InternationalLanguageTranslationEditor.st --- a/Tools__InternationalLanguageTranslationEditor.st Tue Jan 16 22:14:35 2018 +0100 +++ b/Tools__InternationalLanguageTranslationEditor.st Tue Jan 16 22:31:20 2018 +0100 @@ -96,10 +96,10 @@ !InternationalLanguageTranslationEditor class methodsFor:'help spec'! -flyByHelpSpec +helpSpec - ^ super flyByHelpSpec addPairsFrom:#( + ^ super helpSpec addPairsFrom:#( #searchBox 'Show a search box at the bottom to search for substrings in the string keys' @@ -110,29 +110,6 @@ ) ! ! -!InternationalLanguageTranslationEditor class methodsFor:'help specs'! - -helpSpec - "This resource specification was automatically generated - by the UIHelpTool of ST/X." - - "Do not manually edit this!! If it is corrupted, - the UIHelpTool may not be able to read the specification." - - " - UIHelpTool openOnClass:Tools::InternationalLanguageTranslationEditor - " - - - - ^ super helpSpec addPairsFrom:#( - -#searchBox -'' - -) -! ! - !InternationalLanguageTranslationEditor class methodsFor:'image specs'! closeSearchBarIcon @@ -337,249 +314,249 @@ - ^ + ^ #(FullSpec name: windowSpec - window: + window: (WindowSpec - label: 'InternationalLanguageTranslationEditor' - name: 'InternationalLanguageTranslationEditor' - min: (Point 10 10) - bounds: (Rectangle 0 0 774 610) - menu: mainMenu + label: 'InternationalLanguageTranslationEditor' + name: 'InternationalLanguageTranslationEditor' + min: (Point 10 10) + bounds: (Rectangle 0 0 774 610) + menu: mainMenu ) - component: + component: (SpecCollection - collection: ( - (MenuPanelSpec - name: 'ToolBar' - layout: (LayoutFrame 0 0 0 0 0 1 30 0) - menu: menuToolBar - textDefault: true - ) - (VariableVerticalPanelSpec - name: 'TranslationsVariableVerticalPanel' - layout: (LayoutFrame 0 0 30 0 0 1 -32 1) - component: - (SpecCollection - collection: ( - (DataSetSpec - name: 'KeyStringAndLanguageSelectionTable' - model: selectedKeyRow - menu: keyStringAndLanguageSelectionTableMenu - hasHorizontalScrollBar: true - hasVerticalScrollBar: true - dataList: keyStringAndLanguageSelectionTable - columnHolder: keyStringAndLanguageSelectionTableColumnDescriptionHolder - beDependentOfRows: true - columnAdaptor: yourself - postBuildCallback: postBuildDataSet: - ) - (VariableVerticalPanelSpec - name: 'VariableVerticalPanel1' - component: - (SpecCollection - collection: ( - (ViewSpec - name: 'Box1' - component: - (SpecCollection - collection: ( - (LabelSpec - label: 'Original String (Key):' - name: 'Label2' - layout: (LayoutFrame 0 0 -2 0 0 1 28 0) - translateLabel: true - adjust: left - ) - (TextEditorSpec - name: 'OriginalText' - layout: (LayoutFrame 0 0 27 0 0 1 -2 1) - model: originalTextHolder - hasHorizontalScrollBar: true - hasVerticalScrollBar: true - modifiedChannel: originalTextModifiedHolder - acceptCallBack: languageTextAccepted - hasKeyboardFocusInitially: false - ) - ) - - ) - ) - (ViewSpec - name: 'Box3' - component: - (SpecCollection - collection: ( - (LabelSpec - label: 'Select Another Language as example:' - name: 'Label3' - layout: (LayoutFrame 0 0 -6 0 0 1 24 0) - translateLabel: true - adjust: left - ) - (ComboBoxSpec - name: 'ComboBox1' - layout: (LayoutFrame 281 0 -2 0 406 0 18 0) - model: exampleLanguageSelectionHolder - immediateAccept: false - acceptOnLeave: true - acceptOnLostFocus: true - acceptOnPointerLeave: false - comboList: shownLanguages - useIndex: false - ) - (TextEditorSpec - name: 'ExampleLanguageText' - layout: (LayoutFrame 0 0 30 0 0 1 0 1) - model: exampleLanguageTextHolder - hasHorizontalScrollBar: true - hasVerticalScrollBar: true - isReadOnly: true - hasKeyboardFocusInitially: false - ) - ) - - ) - ) - (ViewSpec - name: 'Box2' - component: - (SpecCollection - collection: ( - (LabelSpec - label: 'Translated String:' - name: 'Label1' - layout: (LayoutFrame 0 0 0 0 0 1 30 0) - translateLabel: true - adjust: left - ) - (TextEditorSpec - name: 'LanguageText' - layout: (LayoutFrame 0 0 30 0 0 1 0 1) - model: languageTextHolder - hasHorizontalScrollBar: true - hasVerticalScrollBar: true - acceptChannel: languageTextAcceptHolder - modifiedChannel: languageTextModifiedHolder - acceptCallBack: languageTextAccepted - hasKeyboardFocusInitially: false - postBuildCallback: languageEditorBuilt: - ) - (ActionButtonSpec - label: 'Paste Previous' - name: 'pastePreviousTranslation' - layout: (LayoutOrigin 0 0.83085250338295003 0 0.034482758620689995) - translateLabel: true - model: pastePreviousTranslationInLanguageText - enableChannel: pastePreviousTranslationEnableHolder - disabledLogo: 'Paste Previous' - ) - (ActionButtonSpec - label: 'Paste Original' - name: 'Button1' - layout: (LayoutOrigin -95 0.83085250338295003 0 0.034482758620689995) - translateLabel: true - model: pasteOriginalInLanguageText - enableChannel: pasteOriginalEnableHolder - disabledLogo: 'Paste Original' - ) - ) - - ) - ) - ) - - ) - handles: (Any 0.3333333333333301 0.66666666666667018 1.0) - ) - ) - - ) - handles: (Any 0.5 1.0) - postBuildCallback: postBuildTranslationsPanel: - ) - (ViewSpec - name: 'SearchBox' - layout: (LayoutFrame 0 0 -32 1 0 1 0 1) - level: -1 - visibilityChannel: searchBoxVisible - component: - (SpecCollection - collection: ( - (ActionButtonSpec - label: 'closeSearchBarIcon' - name: 'closeSearchBarButton' - layout: (LayoutFrame 4 0 5 0 25 0 26 0) - hasCharacterOrientedLabel: false - translateLabel: true - model: closeSearchBar - ) - (LabelSpec - label: 'Search:' - name: 'SearchLabel' - layout: (LayoutFrame 30 0 5 0 100 0 27 0) - translateLabel: true - adjust: right - ) - (InputFieldSpec - name: 'SearchEntryField' - layout: (LayoutFrame 100 0 5 0 257 0 27 0) - model: searchTextHolder - immediateAccept: true - acceptOnReturn: true - acceptOnTab: true - acceptOnLostFocus: true - modifiedChannel: searchTextModifiedHolder - acceptOnPointerLeave: false - postBuildCallback: postBuildSearchTextView: - ) - (ActionButtonSpec - label: 'searchNextIcon' - name: 'SearchNextButton' - layout: (LayoutFrame 264 0 5 0 285 0 26 0) - hasCharacterOrientedLabel: false - translateLabel: true - model: searchNextText - ) - (ActionButtonSpec - label: 'searchPreviousIcon' - name: 'searchPreviousButton' - layout: (LayoutFrame 292 0 5 0 313 0 26 0) - hasCharacterOrientedLabel: false - translateLabel: true - model: searchPreviousText - ) - (CheckBoxSpec - label: 'Ignore case' - name: 'IgnoreCaseCheckBox' - layout: (LayoutFrame 322 0 5 0 518 0 27 0) - model: ignoreCaseHolder - translateLabel: true - ) - (LabelSpec - label: 'SearchBarImageInfoLabel' - name: 'SearchBarImageInfoLabel' - layout: (LayoutFrame 524 0 5 0 548 0 27 0) - hasCharacterOrientedLabel: false - translateLabel: true - labelChannel: searchBarImageInfoLabelHolder - ) - (LabelSpec - label: 'SearchBarInfoLabel' - name: 'SearchBarInfoLabel' - layout: (LayoutFrame 551 0 5 0 829 0 27 0) - translateLabel: true - labelChannel: searchBarInfoLabelHolder - adjust: left - ) - ) - - ) - postBuildCallback: postBuildSearchBoxView: - ) - ) - + collection: ( + (MenuPanelSpec + name: 'ToolBar' + layout: (LayoutFrame 0 0 0 0 0 1 30 0) + menu: menuToolBar + textDefault: true + ) + (VariableVerticalPanelSpec + name: 'TranslationsVariableVerticalPanel' + layout: (LayoutFrame 0 0 30 0 0 1 -32 1) + component: + (SpecCollection + collection: ( + (DataSetSpec + name: 'KeyStringAndLanguageSelectionTable' + model: selectedKeyRow + menu: keyStringAndLanguageSelectionTableMenu + hasHorizontalScrollBar: true + hasVerticalScrollBar: true + dataList: keyStringAndLanguageSelectionTable + columnHolder: keyStringAndLanguageSelectionTableColumnDescriptionHolder + beDependentOfRows: true + columnAdaptor: yourself + postBuildCallback: postBuildDataSet: + ) + (VariableVerticalPanelSpec + name: 'VariableVerticalPanel1' + component: + (SpecCollection + collection: ( + (ViewSpec + name: 'Box1' + component: + (SpecCollection + collection: ( + (LabelSpec + label: 'Original String (Key):' + name: 'Label2' + layout: (LayoutFrame 0 0 -2 0 0 1 28 0) + translateLabel: true + adjust: left + ) + (TextEditorSpec + name: 'OriginalText' + layout: (LayoutFrame 0 0 27 0 0 1 -2 1) + model: originalTextHolder + hasHorizontalScrollBar: true + hasVerticalScrollBar: true + modifiedChannel: originalTextModifiedHolder + acceptCallBack: languageTextAccepted + hasKeyboardFocusInitially: false + ) + ) + + ) + ) + (ViewSpec + name: 'Box3' + component: + (SpecCollection + collection: ( + (LabelSpec + label: 'Select Another Language as example:' + name: 'Label3' + layout: (LayoutFrame 0 0 -6 0 0 1 24 0) + translateLabel: true + adjust: left + ) + (ComboBoxSpec + name: 'ComboBox1' + layout: (LayoutFrame 281 0 -2 0 406 0 18 0) + model: exampleLanguageSelectionHolder + immediateAccept: false + acceptOnLeave: true + acceptOnLostFocus: true + acceptOnPointerLeave: false + comboList: shownLanguages + useIndex: false + ) + (TextEditorSpec + name: 'ExampleLanguageText' + layout: (LayoutFrame 0 0 30 0 0 1 0 1) + model: exampleLanguageTextHolder + hasHorizontalScrollBar: true + hasVerticalScrollBar: true + isReadOnly: true + hasKeyboardFocusInitially: false + ) + ) + + ) + ) + (ViewSpec + name: 'Box2' + component: + (SpecCollection + collection: ( + (LabelSpec + label: 'Translated String:' + name: 'Label1' + layout: (LayoutFrame 0 0 0 0 0 1 30 0) + translateLabel: true + adjust: left + ) + (TextEditorSpec + name: 'LanguageText' + layout: (LayoutFrame 0 0 30 0 0 1 0 1) + model: languageTextHolder + hasHorizontalScrollBar: true + hasVerticalScrollBar: true + acceptChannel: languageTextAcceptHolder + modifiedChannel: languageTextModifiedHolder + acceptCallBack: languageTextAccepted + hasKeyboardFocusInitially: false + postBuildCallback: languageEditorBuilt: + ) + (ActionButtonSpec + label: 'Paste Previous' + name: 'pastePreviousTranslation' + layout: (LayoutOrigin 0 0.83085250338295003 0 0.034482758620689995) + translateLabel: true + model: pastePreviousTranslationInLanguageText + enableChannel: pastePreviousTranslationEnableHolder + disabledLogo: 'Paste Previous' + ) + (ActionButtonSpec + label: 'Paste Original' + name: 'Button1' + layout: (LayoutOrigin -95 0.83085250338295003 0 0.034482758620689995) + translateLabel: true + model: pasteOriginalInLanguageText + enableChannel: pasteOriginalEnableHolder + disabledLogo: 'Paste Original' + ) + ) + + ) + ) + ) + + ) + handles: (Any 0.3333333333333301 0.66666666666667018 1.0) + ) + ) + + ) + handles: (Any 0.5 1.0) + postBuildCallback: postBuildTranslationsPanel: + ) + (ViewSpec + name: 'SearchBox' + layout: (LayoutFrame 0 0 -32 1 0 1 0 1) + level: -1 + visibilityChannel: searchBoxVisible + component: + (SpecCollection + collection: ( + (ActionButtonSpec + label: 'closeSearchBarIcon' + name: 'closeSearchBarButton' + layout: (LayoutFrame 4 0 5 0 25 0 26 0) + hasCharacterOrientedLabel: false + translateLabel: true + model: closeSearchBar + ) + (LabelSpec + label: 'Search:' + name: 'SearchLabel' + layout: (LayoutFrame 30 0 5 0 100 0 27 0) + translateLabel: true + adjust: right + ) + (InputFieldSpec + name: 'SearchEntryField' + layout: (LayoutFrame 100 0 5 0 257 0 27 0) + model: searchTextHolder + immediateAccept: true + acceptOnReturn: true + acceptOnTab: true + acceptOnLostFocus: true + modifiedChannel: searchTextModifiedHolder + acceptOnPointerLeave: false + postBuildCallback: postBuildSearchTextView: + ) + (ActionButtonSpec + label: 'searchNextIcon' + name: 'SearchNextButton' + layout: (LayoutFrame 264 0 5 0 285 0 26 0) + hasCharacterOrientedLabel: false + translateLabel: true + model: searchNextText + ) + (ActionButtonSpec + label: 'searchPreviousIcon' + name: 'searchPreviousButton' + layout: (LayoutFrame 292 0 5 0 313 0 26 0) + hasCharacterOrientedLabel: false + translateLabel: true + model: searchPreviousText + ) + (CheckBoxSpec + label: 'Ignore case' + name: 'IgnoreCaseCheckBox' + layout: (LayoutFrame 322 0 5 0 518 0 27 0) + model: ignoreCaseHolder + translateLabel: true + ) + (LabelSpec + label: 'SearchBarImageInfoLabel' + name: 'SearchBarImageInfoLabel' + layout: (LayoutFrame 524 0 5 0 548 0 27 0) + hasCharacterOrientedLabel: false + translateLabel: true + labelChannel: searchBarImageInfoLabelHolder + ) + (LabelSpec + label: 'SearchBarInfoLabel' + name: 'SearchBarInfoLabel' + layout: (LayoutFrame 551 0 5 0 829 0 27 0) + translateLabel: true + labelChannel: searchBarInfoLabelHolder + adjust: left + ) + ) + + ) + postBuildCallback: postBuildSearchBoxView: + ) + ) + ) ) ! ! @@ -601,41 +578,41 @@ - ^ + ^ #(Menu - ( - (MenuItem - label: 'Browse Methods Containing this String' - itemValue: browseReferringMethods - ) - (MenuItem - label: '-' - ) - (MenuItem - label: 'Set Current NameSpace...' - itemValue: changeLastNameSpace - ) - (MenuItem - label: 'Search String in Current NameSpace' - itemValue: searchStringInLastNameSpace - ) - (MenuItem - label: '-' - isVisible: false - ) - (MenuItem - label: 'Set Current Package...' - itemValue: changeLastPackage - isVisible: false - ) - (MenuItem - label: 'Search String in Current Package' - itemValue: searchStringInLastPackage - isVisible: false - ) - ) - nil - nil + ( + (MenuItem + label: 'Browse Methods Containing this String' + itemValue: browseReferringMethods + ) + (MenuItem + label: '-' + ) + (MenuItem + label: 'Set Current NameSpace...' + itemValue: changeLastNameSpace + ) + (MenuItem + label: 'Search String in Current NameSpace' + itemValue: searchStringInLastNameSpace + ) + (MenuItem + label: '-' + isVisible: false + ) + (MenuItem + label: 'Set Current Package...' + itemValue: changeLastPackage + isVisible: false + ) + (MenuItem + label: 'Search String in Current Package' + itemValue: searchStringInLastPackage + isVisible: false + ) + ) + nil + nil ) ! @@ -654,169 +631,169 @@ - ^ + ^ #(Menu - ( - (MenuItem - label: 'File' - submenu: - (Menu - ( - (MenuItem - label: 'New' - itemValue: menuNew - ) - (MenuItem - label: '-' - ) - (MenuItem - label: 'Open Resources for Package or Project...' - itemValue: menuOpenByPackage - ) - (MenuItem - label: 'Open Resource File...' - itemValue: menuOpen - ) - (MenuItem - label: '-' - ) - (MenuItem - label: 'Save All Resource Files' - itemValue: menuSaveAll - ) - (MenuItem - label: 'Save Resource File' - itemValue: menuSave - ) - (MenuItem - label: 'Save Resource File As...' - itemValue: menuSaveAs - ) - (MenuItem - label: '-' - ) - (MenuItem - label: 'Import existing translations from file...' - itemValue: importExistingTranslationsFromFile - ) - (MenuItem - label: '-' - ) - (MenuItem - label: 'Set Current NameSpace' - itemValue: changeLastNameSpace - ) - (MenuItem - label: 'Set Current Package' - itemValue: changeLastPackage - isVisible: false - ) - (MenuItem - label: '-' - ) - (MenuItem - label: 'Exit' - itemValue: closeRequest - ) - ) - nil - nil - ) - ) - (MenuItem - label: 'View' - submenu: - (Menu - ( - (MenuItem - label: 'Show Missing Translations Only' - indication: showMissingTranslationsOnly - ) - (MenuItem - label: 'Show Search Box' - indication: searchBoxVisible - ) - (MenuItem - label: '-' - ) - (MenuItem - label: 'Shown Languages' - submenuChannel: shownLanguagesMenu - ) - ) - nil - nil - ) - ) - (MenuItem - label: 'Languages' - submenu: - (Menu - ( - (MenuItem - label: 'Add Language...' - itemValue: addLanguage - ) - (MenuItem - label: 'Remove Language...' - itemValue: removeLanguage - ) - ) - nil - nil - ) - ) - (MenuItem - label: 'Translations' - submenuChannel: translationsMenuSpec - ) - (MenuItem - label: 'Preferences' - submenu: - (Menu - ( - (MenuItem - label: 'Auto Accept Changes' - indication: autoAcceptHolder - ) - (MenuItem - label: 'Search For Similar Translations' - indication: searchForSimilarTranslationEnableHolder - ) - (MenuItem - label: 'Always Write UTF8' - indication: alwaysWriteUTF8Holder - ) - ) - nil - nil - ) - ) - (MenuItem - label: 'Help' - startGroup: right - submenu: - (Menu - ( - (MenuItem - label: 'Documentation' - itemValue: openDocumentation - ) - (MenuItem - label: '-' - ) - (MenuItem - label: 'About this Application...' - itemValue: openAboutThisApplication - ) - ) - nil - nil - ) - ) - ) - nil - nil + ( + (MenuItem + label: 'File' + submenu: + (Menu + ( + (MenuItem + label: 'New' + itemValue: menuNew + ) + (MenuItem + label: '-' + ) + (MenuItem + label: 'Open Resources for Package or Project...' + itemValue: menuOpenByPackage + ) + (MenuItem + label: 'Open Resource File...' + itemValue: menuOpen + ) + (MenuItem + label: '-' + ) + (MenuItem + label: 'Save All Resource Files' + itemValue: menuSaveAll + ) + (MenuItem + label: 'Save Resource File' + itemValue: menuSave + ) + (MenuItem + label: 'Save Resource File As...' + itemValue: menuSaveAs + ) + (MenuItem + label: '-' + ) + (MenuItem + label: 'Import existing translations from file...' + itemValue: importExistingTranslationsFromFile + ) + (MenuItem + label: '-' + ) + (MenuItem + label: 'Set Current NameSpace' + itemValue: changeLastNameSpace + ) + (MenuItem + label: 'Set Current Package' + itemValue: changeLastPackage + isVisible: false + ) + (MenuItem + label: '-' + ) + (MenuItem + label: 'Exit' + itemValue: closeRequest + ) + ) + nil + nil + ) + ) + (MenuItem + label: 'View' + submenu: + (Menu + ( + (MenuItem + label: 'Show Missing Translations Only' + indication: showMissingTranslationsOnly + ) + (MenuItem + label: 'Show Search Box' + indication: searchBoxVisible + ) + (MenuItem + label: '-' + ) + (MenuItem + label: 'Shown Languages' + submenuChannel: shownLanguagesMenu + ) + ) + nil + nil + ) + ) + (MenuItem + label: 'Languages' + submenu: + (Menu + ( + (MenuItem + label: 'Add Language...' + itemValue: addLanguage + ) + (MenuItem + label: 'Remove Language...' + itemValue: removeLanguage + ) + ) + nil + nil + ) + ) + (MenuItem + label: 'Translations' + submenuChannel: translationsMenuSpec + ) + (MenuItem + label: 'Preferences' + submenu: + (Menu + ( + (MenuItem + label: 'Auto Accept Changes' + indication: autoAcceptHolder + ) + (MenuItem + label: 'Search For Similar Translations' + indication: searchForSimilarTranslationEnableHolder + ) + (MenuItem + label: 'Always Write UTF8' + indication: alwaysWriteUTF8Holder + ) + ) + nil + nil + ) + ) + (MenuItem + label: 'Help' + startGroup: right + submenu: + (Menu + ( + (MenuItem + label: 'Documentation' + itemValue: openDocumentation + ) + (MenuItem + label: '-' + ) + (MenuItem + label: 'About this Application...' + itemValue: openAboutThisApplication + ) + ) + nil + nil + ) + ) + ) + nil + nil ) ! @@ -865,62 +842,62 @@ - ^ + ^ #(Menu - ( - (MenuItem - label: 'Save' - itemValue: menuSave - isButton: true - labelImage: (ResourceRetriever XPToolbarIconLibrary saveImageIcon) - ) - (MenuItem - label: '-' - ) - (MenuItem - label: 'Add Translation' - itemValue: addTranslation - isButton: true - labelImage: (ResourceRetriever XPToolbarIconLibrary newRowIcon) - ) - (MenuItem - label: 'Remove Translation' - itemValue: removeTranslation - isButton: true - labelImage: (ResourceRetriever XPToolbarIconLibrary removeRowIcon) - ) - (MenuItem - label: '-' - ) - (MenuItem - activeHelpKey: browseReferringMethods - label: 'Browse' - itemValue: browseReferringMethods - labelImage: (ResourceRetriever ToolbarIconLibrary systemBrowserIcon) - ) - (MenuItem - label: '' - ) - (MenuItem - label: 'Stop Application' - itemValue: stopApplication - isButton: true - isVisible: stopApplicationIconVisibleHolder - labelImage: (ResourceRetriever XPToolbarIconLibrary stop16x16Icon) - ) - (MenuItem - activeHelpKey: searchBox - label: 'Search' - isButton: true - startGroup: right - hideMenuOnActivated: false - indication: searchBoxVisible - shortcutKey: Ctrlf - labelImage: (ResourceRetriever #'Tools::InternationalLanguageTranslationEditor' searchToolBarIcon) - ) - ) - nil - nil + ( + (MenuItem + label: 'Save' + itemValue: menuSave + isButton: true + labelImage: (ResourceRetriever XPToolbarIconLibrary saveImageIcon) + ) + (MenuItem + label: '-' + ) + (MenuItem + label: 'Add Translation' + itemValue: addTranslation + isButton: true + labelImage: (ResourceRetriever XPToolbarIconLibrary newRowIcon) + ) + (MenuItem + label: 'Remove Translation' + itemValue: removeTranslation + isButton: true + labelImage: (ResourceRetriever XPToolbarIconLibrary removeRowIcon) + ) + (MenuItem + label: '-' + ) + (MenuItem + activeHelpKey: browseReferringMethods + label: 'Browse' + itemValue: browseReferringMethods + labelImage: (ResourceRetriever ToolbarIconLibrary systemBrowserIcon) + ) + (MenuItem + label: '' + ) + (MenuItem + label: 'Stop Application' + itemValue: stopApplication + isButton: true + isVisible: stopApplicationIconVisibleHolder + labelImage: (ResourceRetriever XPToolbarIconLibrary stop16x16Icon) + ) + (MenuItem + activeHelpKey: searchBox + label: 'Search' + isButton: true + startGroup: right + hideMenuOnActivated: false + indication: searchBoxVisible + shortcutKey: Ctrlf + labelImage: (ResourceRetriever #'Tools::InternationalLanguageTranslationEditor' searchToolBarIcon) + ) + ) + nil + nil ) ! @@ -939,54 +916,54 @@ - ^ + ^ #(Menu - ( - (MenuItem - label: 'Add Translation...' - itemValue: addTranslation - ) - (MenuItem - label: 'Remove Translation...' - itemValue: removeTranslation - ) - (MenuItem - label: '-' - ) - (MenuItem - label: 'Extract from Package...' - itemValue: extractTranslationsFromProject - ) - (MenuItem - label: 'Extract from Class...' - itemValue: extractTranslationsFromClass - ) - (MenuItem - label: 'Extract from NameSpace...' - itemValue: extractTranslationsFromNameSpace - ) - (MenuItem - label: '-' - ) - (MenuItem - label: 'Run Application and Collect Translations...' - itemValue: runApplicationAndCollectTranslations - ) - (MenuItem - label: '-' - ) - (MenuItem - label: 'Generate Missing Translations' - itemValue: generateMissingTranslations - ) - (MenuItem - label: 'Generate Missing Translations Slice' - submenuChannel: menuSliceTranslateGenerate - isMenuSlice: true - ) - ) - nil - nil + ( + (MenuItem + label: 'Add Translation...' + itemValue: addTranslation + ) + (MenuItem + label: 'Remove Translation...' + itemValue: removeTranslation + ) + (MenuItem + label: '-' + ) + (MenuItem + label: 'Extract from Package...' + itemValue: extractTranslationsFromProject + ) + (MenuItem + label: 'Extract from Class...' + itemValue: extractTranslationsFromClass + ) + (MenuItem + label: 'Extract from NameSpace...' + itemValue: extractTranslationsFromNameSpace + ) + (MenuItem + label: '-' + ) + (MenuItem + label: 'Run Application and Collect Translations...' + itemValue: runApplicationAndCollectTranslations + ) + (MenuItem + label: '-' + ) + (MenuItem + label: 'Generate Missing Translations' + itemValue: generateMissingTranslations + ) + (MenuItem + label: 'Generate Missing Translations Slice' + submenuChannel: menuSliceTranslateGenerate + isMenuSlice: true + ) + ) + nil + nil ) ! ! @@ -998,18 +975,18 @@ fn := aFilename asFilename. ^ self new - allButOpen; - readResourceFile:fn asLanguage:fn withoutSuffix baseName; - openWindow; - yourself. + allButOpen; + readResourceFile:fn asLanguage:fn withoutSuffix baseName; + openWindow; + yourself. ! openOnPackage:aPackageId ^ self new - allButOpen; - readResourceFileForPackage:aPackageId; - openWindow; - yourself. + allButOpen; + readResourceFileForPackage:aPackageId; + openWindow; + yourself. ! ! !InternationalLanguageTranslationEditor class methodsFor:'tableColumns specs'! @@ -1089,8 +1066,8 @@ newLanguageText "/ languageEditor accept ^self languageTextHolder value isEmptyOrNil - ifTrue:[''] - ifFalse:[self languageTextHolder value asCollectionOfLines first.] + ifTrue:[''] + ifFalse:[self languageTextHolder value asCollectionOfLines first.] ! objectsList @@ -1316,14 +1293,14 @@ searchBoxVisible searchBoxVisible isNil ifTrue:[ - searchBoxVisible := false asValue. - searchBoxVisible - onChangeEvaluate:[ - self updateToolVisibility. - searchBoxVisible value ifTrue:[ - searchTextView takeFocus. - ]. - ]. + searchBoxVisible := false asValue. + searchBoxVisible + onChangeEvaluate:[ + self updateToolVisibility. + searchBoxVisible value ifTrue:[ + searchTextView takeFocus. + ]. + ]. ]. ^ searchBoxVisible. @@ -1462,21 +1439,21 @@ |answer| - self originalTextModifiedHolder value ifTrue:[ - answer := OptionBox - request:'Accept changed original text (key) ?' - label:'Original text (key) changed' - image:(WarningBox iconBitmap) - buttonLabels:#('Cancel' 'Accept' 'Accept As New') - values:#(nil #accept #acceptAsNew) - default:#acceptAsNew. - - answer isNil ifTrue:[^ self originalTextModifiedHolder value:false. ]. - answer == #accept ifTrue:[ + self originalTextModifiedHolder value ifTrue:[ + answer := OptionBox + request:'Accept changed original text (key) ?' + label:'Original text (key) changed' + image:(WarningBox iconBitmap) + buttonLabels:#('Cancel' 'Accept' 'Accept As New') + values:#(nil #accept #acceptAsNew) + default:#acceptAsNew. + + answer isNil ifTrue:[^ self originalTextModifiedHolder value:false. ]. + answer == #accept ifTrue:[ self shouldImplement. ]. - answer == #acceptAsNew ifTrue:[ + answer == #acceptAsNew ifTrue:[ self shouldImplement. ]. - ]. + ]. ! updatePasteOriginalButtonEnabled @@ -1562,18 +1539,18 @@ allProjects := Smalltalk allPackageIDs. projectsWithResources := allProjects - select:[:pID | - |dir| - dir := Smalltalk projectDirectoryForPackage:pID. - dir notNil and:[ - (dir asFilename construct:'resources') exists] - ]. + select:[:pID | + |dir| + dir := Smalltalk projectDirectoryForPackage:pID. + dir notNil and:[ + (dir asFilename construct:'resources') exists] + ]. package := Dialog - requestProject:(resources string:'Name of Package:') - from:projectsWithResources - initialAnswer:LastProject - suggestions:nil. + requestProject:(resources string:'Name of Package:') + from:projectsWithResources + initialAnswer:LastProject + suggestions:nil. package isEmptyOrNil ifTrue:[^ nil ]. LastProject := package. @@ -1694,9 +1671,9 @@ methods := methodsUsingKey at:selectedKey ifAbsent:nil. methods isEmptyOrNil ifTrue:[ - Dialog information:(resources stringWithCRs:'oops - no method remembered.\Please rerun the extract from XXX menu operation'). - ^ self. - ]. + Dialog information:(resources stringWithCRs:'oops - no method remembered.\Please rerun the extract from XXX menu operation'). + ^ self. + ]. browser := UserPreferences systemBrowserClass browseMethods:methods. browser autoSearch:selectedKey ignoreCase:true. ! @@ -1763,13 +1740,13 @@ initialAnswer := lastExtractedProject ? LastExtractedProject. suggestions := initialAnswer isNil ifTrue:[ - OrderedCollection new + OrderedCollection new ] ifFalse:[ - OrderedCollection with:initialAnswer + OrderedCollection with:initialAnswer ]. projectID := Dialog requestProject:(resources string:'Package to extract translations from:') initialAnswer:initialAnswer suggestions:suggestions. projectID notNil ifTrue:[ - projectID := projectID withoutSeparators asSymbol. + projectID := projectID withoutSeparators asSymbol. ]. projectID isEmptyOrNil ifTrue:[^ self ]. @@ -1777,44 +1754,44 @@ newTranslations := Set new. self withWaitCursorDo:[ - Smalltalk allClassesDo:[:eachClass | - eachClass theNonMetaclass instAndClassMethodsDo:[:eachMethod | - eachMethod package == projectID ifTrue:[ - newTranslations addAll:( self extractTranslationsFromMethod:eachMethod ). - ] - ]. - ]. - - self addAllTranslations:newTranslations. + Smalltalk allClassesDo:[:eachClass | + eachClass theNonMetaclass instAndClassMethodsDo:[:eachMethod | + eachMethod package == projectID ifTrue:[ + newTranslations addAll:( self extractTranslationsFromMethod:eachMethod ). + ] + ]. + ]. + + self addAllTranslations:newTranslations. ]. "Modified: / 19-02-2015 / 11:44:24 / Jan Vrany " "Modified: / 16-08-2017 / 12:29:21 / mawalch" ! -generateMissingTranslations: keys for: languages using: translator +generateMissingTranslations: keys for: languages using: translator keys do:[:string | - languages do:[:lang | - | translation | - - translation := keyStringsToLanguageMappings at:string language:lang. - translation isNil ifTrue:[ - translation := translator value: lang value: string. - translation notNil ifTrue:[ - keyStringsToLanguageMappings at: string language: lang put: translation. - ]. - ]. - ]. + languages do:[:lang | + | translation | + + translation := keyStringsToLanguageMappings at:string language:lang. + translation isNil ifTrue:[ + translation := translator value: lang value: string. + translation notNil ifTrue:[ + keyStringsToLanguageMappings at: string language: lang put: translation. + ]. + ]. + ]. ]. "Created: / 19-02-2015 / 12:31:25 / Jan Vrany " ! generateMissingTranslationsFor: languages - self - generateMissingTranslations: keyStringsToLanguageMappings keys - for: languages - using: [ :lang :string | '**%1** %2' bindWith: lang asUppercase with: string ] + self + generateMissingTranslations: keyStringsToLanguageMappings keys + for: languages + using: [ :lang :string | '**%1** %2' bindWith: lang asUppercase with: string ] "Created: / 19-02-2015 / 12:39:46 / Jan Vrany " ! @@ -1997,8 +1974,8 @@ languagesToRemove := Dialog chooseMultiple:'Which language(s) do you want to remove?' fromList:languagesList lines:10. languagesToRemove isEmptyOrNil ifTrue:[^ self ]. (Dialog confirm: 'Are you sure to remove the languages: ', languagesToRemove printString) ifTrue:[ - self languagesList removeAll:languagesToRemove. - self shownLanguages removeAll:languagesToRemove. + self languagesList removeAll:languagesToRemove. + self shownLanguages removeAll:languagesToRemove. ]. ! @@ -2020,36 +1997,36 @@ |applicationClass newTranslations pseudoPack app startSelector| monitoredApplication notNil ifTrue:[ - monitoredApplication terminate. - [monitoredApplication notNil] whileTrue:[ - Delay waitForSeconds:0.1 - ]. + monitoredApplication terminate. + [monitoredApplication notNil] whileTrue:[ + Delay waitForSeconds:0.1 + ]. ]. applicationClass := Dialog - requestClass:'Application class to start and collect translations from:' - okLabel:'OK' - initialAnswer:(lastExtractedApplicationClass ? LastExtractedApplicationClass ). + requestClass:'Application class to start and collect translations from:' + okLabel:'OK' + initialAnswer:(lastExtractedApplicationClass ? LastExtractedApplicationClass ). applicationClass isNil ifTrue:[^ self ]. applicationClass isNameSpace ifTrue:[ - Dialog warn:'Entered class is a NameSpace'. - ^ self. + Dialog warn:'Entered class is a NameSpace'. + ^ self. ]. applicationClass isVisualStartable ifTrue:[ - startSelector := #open + startSelector := #open ] ifFalse:[ - startSelector := Dialog - request:'Entered class seems to be no application class. Ok to start using selector:' - initialAnswer:((applicationClass respondsTo:#'start') - ifTrue:#'start' - ifFalse:#'new') - okLabel:'START' - title:'Start Application'. - startSelector isNil ifTrue:[ - ^ self - ]. - startSelector := startSelector asSymbol. + startSelector := Dialog + request:'Entered class seems to be no application class. Ok to start using selector:' + initialAnswer:((applicationClass respondsTo:#'start') + ifTrue:#'start' + ifFalse:#'new') + okLabel:'START' + title:'Start Application'. + startSelector isNil ifTrue:[ + ^ self + ]. + startSelector := startSelector asSymbol. ]. lastExtractedApplicationClass := LastExtractedApplicationClass := applicationClass. @@ -2062,21 +2039,21 @@ self stopApplicationIconVisibleHolder value:true. - monitoredApplication := - [ - [ - app := applicationClass new. - app resources:pseudoPack. - - app perform:startSelector. - app window waitUntilVisible. - app window waitUntilClosed. - ] ensure:[ - app closeRequest. - self stopApplicationIconVisibleHolder value:false. - monitoredApplication := nil. - ]. - ] fork. + monitoredApplication := + [ + [ + app := applicationClass new. + app resources:pseudoPack. + + app perform:startSelector. + app window waitUntilVisible. + app window waitUntilClosed. + ] ensure:[ + app closeRequest. + self stopApplicationIconVisibleHolder value:false. + monitoredApplication := nil. + ]. + ] fork. ! searchStringInLastNameSpace @@ -2114,35 +2091,35 @@ browser := NewSystemBrowser new "open". browser allButOpen. - + lastSearchPatterns := browser lastSearchPatterns. (lastSearchPatterns notNil and:[lastSearchPatterns first ~= selectedKey]) ifTrue:[ - browser lastSearchPatterns addFirst: selectedKey + browser lastSearchPatterns addFirst: selectedKey ]. SearchDialog lastStringSearchArea: #currentPackage. lastPackage isNil ifTrue:[ - self changeLastPackage. + self changeLastPackage. ]. lastPackage notNil ifTrue:[ "/ browser navigationState selectedClasses value: lastNameSpace allClasses. - browser navigationState packageFilter value: (OrderedCollection with:lastPackage). - browser navigationState selectedProjects value: (OrderedCollection with:lastPackage). + browser navigationState packageFilter value: (OrderedCollection with:lastPackage). + browser navigationState selectedProjects value: (OrderedCollection with:lastPackage). ]. self withWaitCursorDo:[ - browser - askForMethodAndSpawnSearchTitle:'String to Search for in Sources:' - browserLabel:'Methods containing "%1"' - searchWith:#( #'findString:in:ignoreCase:match:' #'findString:inMethods:ignoreCase:match:' ) - searchWhat:#string - searchArea:#currentPackage - withCaseIgnore:false - withTextEntry:false - withMatch:true - withMethodList:false - setSearchPattern:[:brwsr :string :ignoreCase :doMatch| - brwsr autoSearchPattern:string ignoreCase:ignoreCase. - ] - initialText:selectedKey "/ does not work: ('''*',selectedKey,'*''') check match!! + browser + askForMethodAndSpawnSearchTitle:'String to Search for in Sources:' + browserLabel:'Methods containing "%1"' + searchWith:#( #'findString:in:ignoreCase:match:' #'findString:inMethods:ignoreCase:match:' ) + searchWhat:#string + searchArea:#currentPackage + withCaseIgnore:false + withTextEntry:false + withMatch:true + withMethodList:false + setSearchPattern:[:brwsr :string :ignoreCase :doMatch| + brwsr autoSearchPattern:string ignoreCase:ignoreCase. + ] + initialText:selectedKey "/ does not work: ('''*',selectedKey,'*''') check match!! ]. ! ! @@ -2172,13 +2149,13 @@ | menu | menu := Menu new. - keyStringsToLanguageMappings notNil ifTrue:[ - keyStringsToLanguageMappings languages do:[:lang | - menu addItem: - (MenuItem - label: (resources string: 'Generate Missing Translations - %1' with: lang asUppercase) - itemValue: [ self generateMissingTranslationsFor: (Array with: lang) ]) - ]. + keyStringsToLanguageMappings notNil ifTrue:[ + keyStringsToLanguageMappings languages do:[:lang | + menu addItem: + (MenuItem + label: (resources string: 'Generate Missing Translations - %1' with: lang asUppercase) + itemValue: [ self generateMissingTranslationsFor: (Array with: lang) ]) + ]. ]. ^ menu @@ -2217,49 +2194,49 @@ addAllTranslations:newTranslations "merge found xlations into the list of already present xlations" - + |newTranslationKeys stringKeys nonStringKeys| newTranslationKeys := newTranslations select:[:k | k notEmptyOrNil and:[k isString not or:[k isBlank not]]]. newTranslationKeys := newTranslationKeys select:[:k | (keyStringsToLanguageMappings includesKey:k) not]. "/ follow the common-xlations algrithm of ResourcePack "/ (which knows how to xlate strings with additional special chars.) - newTranslationKeys := - newTranslationKeys collect:[:oldKey | - |newKey methods| - - (oldKey endsWith:' ...') ifTrue:[ - newKey := oldKey copyButLast:4. - ] ifFalse:[ (oldKey endsWith:'...') ifTrue:[ - newKey := oldKey copyButLast:3. - ] ifFalse:[ ('\.:?=,!! ' includes:oldKey last) ifTrue:[ - newKey := oldKey copyButLast:1. - ] ifFalse:[ ((oldKey first == $() and:[ oldKey last == $) ]) ifTrue:[ - newKey := oldKey copyFrom:2 to:oldKey size - 1 - ] ifFalse:[ ((oldKey first == $[) and:[ oldKey last == $] ]) ifTrue:[ - newKey := oldKey copyFrom:2 to:oldKey size - 1 - ] ifFalse:[ - newKey :=oldKey - ]]]]]. - "/ must attach oldKey-methods to newKey - methods := methodsUsingKey at:oldKey ifAbsent:nil. - methods notNil ifTrue:[ - (methodsUsingKey at:newKey ifAbsentPut:[Set new]) addAll:methods - ]. - newKey - ]. - + newTranslationKeys := + newTranslationKeys collect:[:oldKey | + |newKey methods| + + (oldKey endsWith:' ...') ifTrue:[ + newKey := oldKey copyButLast:4. + ] ifFalse:[ (oldKey endsWith:'...') ifTrue:[ + newKey := oldKey copyButLast:3. + ] ifFalse:[ ('\.:?=,!! ' includes:oldKey last) ifTrue:[ + newKey := oldKey copyButLast:1. + ] ifFalse:[ ((oldKey first == $() and:[ oldKey last == $) ]) ifTrue:[ + newKey := oldKey copyFrom:2 to:oldKey size - 1 + ] ifFalse:[ ((oldKey first == $[) and:[ oldKey last == $] ]) ifTrue:[ + newKey := oldKey copyFrom:2 to:oldKey size - 1 + ] ifFalse:[ + newKey :=oldKey + ]]]]]. + "/ must attach oldKey-methods to newKey + methods := methodsUsingKey at:oldKey ifAbsent:nil. + methods notNil ifTrue:[ + (methodsUsingKey at:newKey ifAbsentPut:[Set new]) addAll:methods + ]. + newKey + ]. + newTranslationKeys := newTranslationKeys asSet. newTranslationKeys := newTranslationKeys select:[:k | (keyStringsToLanguageMappings includesKey:k) not]. newTranslationKeys notEmpty ifTrue:[ - stringKeys := newTranslationKeys select:[:k | k isString]. - nonStringKeys := newTranslationKeys select:[:k | k isString not]. - - stringKeys := stringKeys asSortedCollection. - keyStringsToLanguageMappings addKeys:stringKeys. - keyStringsToLanguageMappings addKeys:nonStringKeys. - modified := true. + stringKeys := newTranslationKeys select:[:k | k isString]. + nonStringKeys := newTranslationKeys select:[:k | k isString not]. + + stringKeys := stringKeys asSortedCollection. + keyStringsToLanguageMappings addKeys:stringKeys. + keyStringsToLanguageMappings addKeys:nonStringKeys. + modified := true. ]. ! @@ -2269,18 +2246,18 @@ newTranslations := Set new. self withWaitCursorDo:[ - "/ now, the hard part: - "/ possible translations are in the specs, - "/ and all arguments to (resources string:) messages. - aClass instAndClassMethodsDo:[:eachMethod | - newTranslations addAll:( self extractTranslationsFromMethod:eachMethod ). - ]. + "/ now, the hard part: + "/ possible translations are in the specs, + "/ and all arguments to (resources string:) messages. + aClass instAndClassMethodsDo:[:eachMethod | + newTranslations addAll:( self extractTranslationsFromMethod:eachMethod ). + ]. ]. - - newTranslations := - newTranslations select:[:eachTranslation| - (aClass resources at:eachTranslation ifAbsent:nil) isNil - ]. + + newTranslations := + newTranslations select:[:eachTranslation| + (aClass resources at:eachTranslation ifAbsent:nil) isNil + ]. ^ newTranslations ! @@ -2290,58 +2267,58 @@ |codeStrings matcher parseTree resourceKeys| parseTree := RBParser - parseMethod:aMethod source - onError: [:str :pos | Transcript showCR:str. Transcript showCR:pos. - nil]. + parseMethod:aMethod source + onError: [:str :pos | Transcript showCR:str. Transcript showCR:pos. + nil]. parseTree isNil ifTrue:[^ #() ]. codeStrings := - #( - '`@dict addPairsFrom: `#helpKeysAndStrings' - '^ `#lit' - ). + #( + '`@dict addPairsFrom: `#helpKeysAndStrings' + '^ `#lit' + ). resourceKeys := Set new. matcher := ParseTreeSearcher new. matcher - matchesAnyOf: codeStrings - do: [:aNode :answer | - |sel argNode arg| - - aNode isReturn ifTrue:[ - "/ a ^ #(...) - aNode value isLiteralArray ifTrue:[ - aNode value value pairWiseDo:[:helpKey :helpString | - self rememberMethod:aMethod usingKey:helpString. - resourceKeys add:helpString. - ]. - ]. - ] ifFalse:[ - sel := aNode selector. - (sel startsWith:'addPairsFrom:') ifTrue:[ - argNode := aNode arguments at:1. - argNode isLiteralArray ifTrue:[ - arg := argNode value. - arg doWithIndex:[:el :index | - index even ifTrue:[ - el isString ifTrue:[ - self rememberMethod:aMethod usingKey:el. - resourceKeys add:el. - ] - ]. - ]. - ] ifFalse:[ - Transcript halt - showCR:(resources - string:'Cannot derive resourceKey from non-literal array: %1 in %2' - with:argNode formattedCode - with:aMethod selector). - ]. - ]. - ]. - aNode - ]. + matchesAnyOf: codeStrings + do: [:aNode :answer | + |sel argNode arg| + + aNode isReturn ifTrue:[ + "/ a ^ #(...) + aNode value isLiteralArray ifTrue:[ + aNode value value pairWiseDo:[:helpKey :helpString | + self rememberMethod:aMethod usingKey:helpString. + resourceKeys add:helpString. + ]. + ]. + ] ifFalse:[ + sel := aNode selector. + (sel startsWith:'addPairsFrom:') ifTrue:[ + argNode := aNode arguments at:1. + argNode isLiteralArray ifTrue:[ + arg := argNode value. + arg doWithIndex:[:el :index | + index even ifTrue:[ + el isString ifTrue:[ + self rememberMethod:aMethod usingKey:el. + resourceKeys add:el. + ] + ]. + ]. + ] ifFalse:[ + Transcript halt + showCR:(resources + string:'Cannot derive resourceKey from non-literal array: %1 in %2' + with:argNode formattedCode + with:aMethod selector). + ]. + ]. + ]. + aNode + ]. matcher executeTree: parseTree initialAnswer: nil. ^ resourceKeys @@ -2356,42 +2333,42 @@ menu isNil ifTrue:[ ^ #() ]. (menu isKindOf:Menu) ifFalse:[ - menu := Menu new fromLiteralArrayEncoding:menu + menu := Menu new fromLiteralArrayEncoding:menu ]. resourceKeys := Set new. menu allItemsDo:[:aMenuItem | - aMenuItem translateLabel ifTrue:[ - (aMenuItem isSeparatorItem or:[aMenuItem isMenuSlice]) ifFalse:[ - self rememberMethod:aMethod usingKey:aMenuItem label. - resourceKeys add:aMenuItem label. - ] - ] + aMenuItem translateLabel ifTrue:[ + (aMenuItem isSeparatorItem or:[aMenuItem isMenuSlice]) ifFalse:[ + self rememberMethod:aMethod usingKey:aMenuItem label. + resourceKeys add:aMenuItem label. + ] + ] ]. ^ resourceKeys ! extractTranslationsFromMethod:aMethod "return strings which need translation from a method." - + |mResources| mResources := aMethod resources. mResources notNil ifTrue:[ - (mResources includesKey:#menu) ifTrue:[ - ^ self extractTranslationsFromMenuSpecMethod:aMethod. - ]. - (mResources includesKey:#canvas) ifTrue:[ - ^ self extractTranslationsFromUISpecMethod:aMethod. - ]. - (mResources includesKey:#help) ifTrue:[ - ^ self extractTranslationsFromHelpSpecMethod:aMethod. - ]. - (mResources includesKey:#tableColumns) ifTrue:[ - ^ self extractTranslationsFromTableColumnsSpecMethod:aMethod. - ]. - - ^ self extractTranslationsFromSpecMethod:aMethod. + (mResources includesKey:#menu) ifTrue:[ + ^ self extractTranslationsFromMenuSpecMethod:aMethod. + ]. + (mResources includesKey:#canvas) ifTrue:[ + ^ self extractTranslationsFromUISpecMethod:aMethod. + ]. + (mResources includesKey:#help) ifTrue:[ + ^ self extractTranslationsFromHelpSpecMethod:aMethod. + ]. + (mResources includesKey:#tableColumns) ifTrue:[ + ^ self extractTranslationsFromTableColumnsSpecMethod:aMethod. + ]. + + ^ self extractTranslationsFromSpecMethod:aMethod. ]. ^ self extractTranslationsFromMethodsCode:aMethod ! @@ -2403,45 +2380,45 @@ |codeStrings matcher parseTree resourceKeys| parseTree := RBParser - parseMethod:aMethod source - onError: [:str :pos | Transcript showCR:str. Transcript showCR:pos. - nil]. + parseMethod:aMethod source + onError: [:str :pos | Transcript showCR:str. Transcript showCR:pos. + nil]. parseTree isNil ifTrue:[^ #() ]. codeStrings := - #( - 'resources `@msg: `@args' - 'self resources `@msg: `@args' - 'self class resources `@msg: `@args' - 'self class classResources `@msg: `@args' - 'self classResources `@msg: `@args' - '`V classResources `@msg: `@args' - ). + #( + 'resources `@msg: `@args' + 'self resources `@msg: `@args' + 'self class resources `@msg: `@args' + 'self class classResources `@msg: `@args' + 'self classResources `@msg: `@args' + '`V classResources `@msg: `@args' + ). resourceKeys := Set new. matcher := ParseTreeSearcher new. matcher - matchesAnyOf: codeStrings - do: [:aNode :answer | - |sel keyStringArgNode keyStringArg| - - sel := aNode selector. - ((sel startsWith:'string:') or:[(sel startsWith:'at:') or:[sel startsWith:'stringWithCRs:']]) ifTrue:[ - keyStringArgNode := aNode arguments at:1. - (keyStringArg := self literalStringOrStringConcatenation:keyStringArgNode) notNil ifTrue:[ - self rememberMethod:aMethod usingKey:keyStringArg. - resourceKeys add:keyStringArg. - ] ifFalse:[ - Transcript - showCR:(resources - string:'[LanguageTranslator] warning: Cannot derive resourceKey from non-string: %1 in %2' - with:keyStringArgNode formattedCode - with:aMethod whoString). - ]. - ]. - aNode - ]. + matchesAnyOf: codeStrings + do: [:aNode :answer | + |sel keyStringArgNode keyStringArg| + + sel := aNode selector. + ((sel startsWith:'string:') or:[(sel startsWith:'at:') or:[sel startsWith:'stringWithCRs:']]) ifTrue:[ + keyStringArgNode := aNode arguments at:1. + (keyStringArg := self literalStringOrStringConcatenation:keyStringArgNode) notNil ifTrue:[ + self rememberMethod:aMethod usingKey:keyStringArg. + resourceKeys add:keyStringArg. + ] ifFalse:[ + Transcript + showCR:(resources + string:'[LanguageTranslator] warning: Cannot derive resourceKey from non-string: %1 in %2' + with:keyStringArgNode formattedCode + with:aMethod whoString). + ]. + ]. + aNode + ]. matcher executeTree: parseTree initialAnswer: nil. ^ resourceKeys @@ -2462,29 +2439,29 @@ columnDescription isNil ifTrue:[ ^ #() ]. (columnDescription first isKindOf:DataSetColumnSpec) ifFalse:[ - columnDescription := columnDescription collect:[:el | DataSetColumnSpec new fromLiteralArrayEncoding:el]. + columnDescription := columnDescription collect:[:el | DataSetColumnSpec new fromLiteralArrayEncoding:el]. ]. resourceKeys := Set new. columnDescription do:[:aColumnSpec | - aColumnSpec translateLabel ifTrue:[ - self rememberMethod:aMethod usingKey:aColumnSpec label. - resourceKeys add:aColumnSpec label. - ] + aColumnSpec translateLabel ifTrue:[ + self rememberMethod:aMethod usingKey:aColumnSpec label. + resourceKeys add:aColumnSpec label. + ] ]. ^ resourceKeys ! extractTranslationsFromUISpecMethod:aMethod "return strings which need translation from a UI-spec method" - + |spec resourceKeys visitor| spec := aMethod mclass theNonMetaclass perform:aMethod selector. spec isNil ifTrue:[ ^ #() ]. (spec isKindOf:UISpecification) ifFalse:[ - spec := UISpecification from:spec + spec := UISpecification from:spec ]. resourceKeys := Set new. @@ -2492,38 +2469,38 @@ visitor := UISpecVisitor new. spec acceptVisitor:visitor. visitor translatedLabels do:[:each | - self rememberMethod:aMethod usingKey:each. + self rememberMethod:aMethod usingKey:each. ]. ^ visitor translatedLabels ! literalStringOrStringConcatenation:aParseNode "nil if not a literal or a string concatenation" - + aParseNode isLiteralString ifTrue:[^ aParseNode value]. (aParseNode isMessage and:[aParseNode selector == #,]) ifTrue:[ - |leftString rightString| - - aParseNode receiver isLiteralString ifTrue:[ - leftString := aParseNode receiver value - ] ifFalse:[ - leftString := self literalStringOrStringConcatenation:aParseNode receiver. - ]. - aParseNode arguments first isLiteralString ifTrue:[ - rightString := aParseNode arguments first value - ] ifFalse:[ - rightString := self literalStringOrStringConcatenation:aParseNode arguments first. - ]. - (leftString notNil and:[rightString notNil]) ifTrue:[ - ^ leftString , rightString - ]. + |leftString rightString| + + aParseNode receiver isLiteralString ifTrue:[ + leftString := aParseNode receiver value + ] ifFalse:[ + leftString := self literalStringOrStringConcatenation:aParseNode receiver. + ]. + aParseNode arguments first isLiteralString ifTrue:[ + rightString := aParseNode arguments first value + ] ifFalse:[ + rightString := self literalStringOrStringConcatenation:aParseNode arguments first. + ]. + (leftString notNil and:[rightString notNil]) ifTrue:[ + ^ leftString , rightString + ]. ]. ^ nil ! recordNewTranslation:aString "called from recorder, when the monitored application does a translation" - + self addAllTranslations:{ aString } ! @@ -2625,16 +2602,16 @@ printEditingWarningOn: aStream aStream nextPutAll: ';'; - cr; - nextPutAll: '; WARNING:'; - cr; - nextPutAll: '; this file contains national characters.'; - cr; - nextPutAll: '; DO NOT EDIT this file with an old vi!!'; - cr; - nextPutAll: ';'; - cr; - cr. + cr; + nextPutAll: '; WARNING:'; + cr; + nextPutAll: '; this file contains national characters.'; + cr; + nextPutAll: '; DO NOT EDIT this file with an old vi!!'; + cr; + nextPutAll: ';'; + cr; + cr. ! printEncoderFor: lang on: aStream @@ -2670,45 +2647,45 @@ maxKeySize := keyStringsToLanguageMappings maxKeySizeForLanguage: lang. orderedAssociations do:[:association | - "use #basicStoreString to avoid implicit utf8Encoding for UnicodeStrings" - aStream nextPutAll: ((characterEncoder encodeString:association key basicStoreString) paddedTo: maxKeySize) ; - tab; - nextPutAll: (characterEncoder encodeString: association value basicStoreString); - cr. - ]. + "use #basicStoreString to avoid implicit utf8Encoding for UnicodeStrings" + aStream nextPutAll: ((characterEncoder encodeString:association key basicStoreString) paddedTo: maxKeySize) ; + tab; + nextPutAll: (characterEncoder encodeString: association value basicStoreString); + cr. + ]. ! readResourceFile:aFilename asLanguage:lang |resourcePack inStream lineString encoding decoder sortedKeys remainingKeys| aFilename exists ifFalse:[ - Dialog information:(resources string:'Language file: "%1" does not exist' with:aFilename baseName). - ^ self + Dialog information:(resources string:'Language file: "%1" does not exist' with:aFilename baseName). + ^ self ]. resourcePack := ResourcePack new. inStream := aFilename readStream. [inStream atEnd] whileFalse:[ - lineString := inStream nextLine. - (lineString notEmpty - and:[ (lineString startsWith:';') not and:[ (lineString startsWith:'"/') not]]) ifTrue:[ - ((lineString startsWith:'#') and:[(lineString startsWith:'#(') not]) ifTrue:[ - lineString := (lineString copyFrom:2) withoutSeparators. - (lineString startsWith:'encoding ') ifTrue:[ - encoding := ResourcePack extractEncodingFromLine:lineString. - decoder := CharacterEncoder encoderFor:encoding ifAbsent:nil. - ]. - ] ifFalse:[ - ResourcePack - processResourceLine:lineString - encoding:decoder - file:aFilename pathName - printErrorWith:[:msg | Transcript showCR:msg ] - for:resourcePack - keepUselessTranslations:true. - ]. - ]. + lineString := inStream nextLine. + (lineString notEmpty + and:[ (lineString startsWith:';') not and:[ (lineString startsWith:'"/') not]]) ifTrue:[ + ((lineString startsWith:'#') and:[(lineString startsWith:'#(') not]) ifTrue:[ + lineString := (lineString copyFrom:2) withoutSeparators. + (lineString startsWith:'encoding ') ifTrue:[ + encoding := ResourcePack extractEncodingFromLine:lineString. + decoder := CharacterEncoder encoderFor:encoding ifAbsent:nil. + ]. + ] ifFalse:[ + ResourcePack + processResourceLine:lineString + encoding:decoder + file:aFilename pathName + printErrorWith:[:msg | Transcript showCR:msg ] + for:resourcePack + keepUselessTranslations:true. + ]. + ]. ]. inStream close. @@ -2719,10 +2696,10 @@ keyStringsToLanguageMappings atLanguage: lang putEncoder: decoder. sortedKeys do:[:k | - keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k) sendChange:false + keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k) sendChange:false ]. remainingKeys do:[:k | - keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k) sendChange:false + keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k) sendChange:false ]. keyStringsToLanguageMappings changed. ! @@ -3067,7 +3044,7 @@ search "make the searchbox visible" - + self searchBoxVisible value: true. self updateToolVisibility. searchTextView takeFocus. @@ -3121,11 +3098,11 @@ forwardFor:aString collectedKeys isNil ifTrue:[ - collectedKeys := Set new. + collectedKeys := Set new. ]. collectedKeys add:aString. watchingTranslationEditor notNil ifTrue:[ - watchingTranslationEditor recordNewTranslation:aString. + watchingTranslationEditor recordNewTranslation:aString. ]. ^ realResourcePack perform:(thisContext sender selector) withArguments:(thisContext sender args). ! @@ -3240,8 +3217,8 @@ orderedLanguageMappingsAssociationsFor: language "Returns a collection of languageMappings associations (alphabetically ordered by keys) " - ^(self atLanguage: language) associations - asSortedCollection:[:a :b | a key isArray or:[b key isArray or:[a key < b key]]]. + ^(self atLanguage: language) associations + asSortedCollection:[:a :b | a key isArray or:[b key isArray or:[a key < b key]]]. ! perLanguageInfo @@ -3374,15 +3351,15 @@ similarAssociations:= (self mappingAtLanguage: language) associationsSelect:[:each | - |eachKey| - - eachKey := eachKey. - eachKey isString - and:[(eachKey sameAs: aKey) - or:[(aKey asUppercase startsWith: eachKey asUppercase) - or:[((eachKey asUppercase levenshteinTo: aKey asUppercase)/ eachKey size) < 0.3 - ]]] - and:[each value notEmptyOrNil] + |eachKey| + + eachKey := eachKey. + eachKey isString + and:[(eachKey sameAs: aKey) + or:[(aKey asUppercase startsWith: eachKey asUppercase) + or:[((eachKey asUppercase levenshteinTo: aKey asUppercase)/ eachKey size) < 0.3 + ]]] + and:[each value notEmptyOrNil] ]. ^similarAssociations ! ! @@ -3448,4 +3425,3 @@ version_CVS ^ '$Header$' ! ! -