diff -r 37159708ecef -r 641467b2f522 Tools__InternationalLanguageTranslationEditor.st --- a/Tools__InternationalLanguageTranslationEditor.st Sat Mar 17 12:38:37 2007 +0100 +++ b/Tools__InternationalLanguageTranslationEditor.st Mon Mar 19 12:07:20 2007 +0100 @@ -15,7 +15,8 @@ lastSelectedKey autoAcceptHolder languageEditor selectedColIndexHolder exampleLanguageSelectionHolder exampleLanguageTextHolder pastePreviousTranslationEnableHolder - searchForSimilarTranslationEnableHolder alwaysWriteUTF8Holder' + searchForSimilarTranslationEnableHolder alwaysWriteUTF8Holder + lastNameSpace' classVariableNames:'LastExtractedClass LastExtractedApplicationClass LastExtractedProject' poolDictionaries:'' @@ -114,7 +115,6 @@ label: 'InternationalLanguageTranslationEditor' name: 'InternationalLanguageTranslationEditor' min: (Point 10 10) - max: (Point 1024 768) bounds: (Rectangle 0 0 778 614) menu: mainMenu ) @@ -136,6 +136,7 @@ (DataSetSpec name: 'KeyStringAndLanguageSelectionTable' model: selectedKeyRow + menu: keyStringAndLanguageSelectionTableMenu hasHorizontalScrollBar: true hasVerticalScrollBar: true dataList: keyStringAndLanguageSelectionTable @@ -263,6 +264,39 @@ !InternationalLanguageTranslationEditor class methodsFor:'menu specs'! +keyStringAndLanguageSelectionTableMenu + "This resource specification was automatically generated + by the MenuEditor of ST/X." + + "Do not manually edit this!! If it is corrupted, + the MenuEditor may not be able to read the specification." + + " + MenuEditor new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#keyStringAndLanguageSelectionTableMenu + (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor keyStringAndLanguageSelectionTableMenu)) startUp + " + + + + ^ + #(Menu + ( + (MenuItem + label: 'Current NameSpace:' + itemValue: changeLastNameSpace + translateLabel: true + ) + (MenuItem + label: 'Search String in Current NameSpace:' + itemValue: searchStringInLastNameSpace + translateLabel: true + ) + ) + nil + nil + ) +! + mainMenu "This resource specification was automatically generated by the MenuEditor of ST/X." @@ -321,6 +355,14 @@ label: '-' ) (MenuItem + label: 'Current NameSpace:' + itemValue: changeLastNameSpace + translateLabel: true + ) + (MenuItem + label: '-' + ) + (MenuItem label: 'Exit' itemValue: closeRequest translateLabel: true @@ -405,6 +447,11 @@ translateLabel: true ) (MenuItem + label: 'Extract from NameSpace...' + itemValue: extractTranslationsFromNameSpace + translateLabel: true + ) + (MenuItem label: '-' ) (MenuItem @@ -612,15 +659,17 @@ newLanguageText "/ languageEditor accept -^self languageTextHolder value isNil - ifTrue:[''] - ifFalse:[self languageTextHolder value asCollectionOfLines first.] + ^self languageTextHolder value isNil + ifTrue:[''] + ifFalse:[self languageTextHolder value asCollectionOfLines first.] ! selectedKey "Returns the current selected key if there is one row seleted. Otherwise, returns nil" |rowSelectionIndex | + keyStringsToLanguageMappings isNil ifTrue:[^nil]. + self selectedKeyRow value isNil ifTrue:[^nil]. rowSelectionIndex := self selectedKeyRow value. rowSelectionIndex == 0 ifTrue:[^nil]. ^ keyStringsToLanguageMappings keyAt:rowSelectionIndex. @@ -629,29 +678,28 @@ !InternationalLanguageTranslationEditor methodsFor:'additionalFuncionalities'! searchForSimilarTranslation -"Looks for a quite similar translation for the key and display a dialog with available options" -|similarTranslationsAssociations selectedTranslation| + "Looks for a quite similar translation for the key and display a dialog with available options" + |similarTranslationsAssociations selectedTranslation| -self shouldSearchForSimilarTranslation ifFalse:[^self]. + self shouldSearchForSimilarTranslation ifFalse:[^self]. -similarTranslationsAssociations := keyStringsToLanguageMappings searchForSimilarTranslation: self selectedKey in: self currentLanguage. -similarTranslationsAssociations isEmpty ifTrue:[^self]. + similarTranslationsAssociations := keyStringsToLanguageMappings searchForSimilarTranslation: self selectedKey in: self currentLanguage. + similarTranslationsAssociations isEmpty ifTrue:[^self]. -similarTranslationsAssociations := similarTranslationsAssociations associations inject: OrderedCollection new into:[:collection :association | - collection detect:[:selectedAssociation | - selectedAssociation value sameAs: association value] ifNone:[collection add: association]. - collection]. -selectedTranslation := Dialog - choose:'Choose one if you consider itīs usefull to translate: -', - '<', self selectedKey, '> ', - self currentExampleLanguageText - fromList: (similarTranslationsAssociations collect:[:each | '<', each key, '> ', each value]) - values: (similarTranslationsAssociations collect:[:each | each value]) - lines:10 - cancel: nil. + similarTranslationsAssociations := similarTranslationsAssociations associations inject: OrderedCollection new into:[:collection :association | + collection detect:[:selectedAssociation | + selectedAssociation value sameAs: association value] ifNone:[collection add: association]. + collection]. + selectedTranslation := Dialog + choose:'Choose one if you consider itīs usefull to translate: + ', + '<', self selectedKey, '> ', (self currentExampleLanguageText ifNil:['']) + fromList: (similarTranslationsAssociations collect:[:each | '<', each key, '> ', each value]) + values: (similarTranslationsAssociations collect:[:each | each value]) + lines:10 + cancel: nil. -selectedTranslation notNil ifTrue:[self languageTextHolderValue: selectedTranslation]. + selectedTranslation notNil ifTrue:[self languageTextHolderValue: selectedTranslation]. ! ! !InternationalLanguageTranslationEditor methodsFor:'aspects'! @@ -813,8 +861,8 @@ languageTextHolderValue: aString -self languageTextHolder value: aString. -self languageTextModifiedHolder value:true. + self languageTextHolder value: aString. + self languageTextModifiedHolder value:true. ! update:something with:aParameter from:changedObject @@ -838,7 +886,7 @@ updateCopyPreviousTranslationButtonEnabled - self pastePreviousTranslationEnableHolder value: self shouldCopyPreviousTranslationButtonBeEnabled + self pastePreviousTranslationEnableHolder value: self shouldCopyPreviousTranslationButtonBeEnabled ! updateExampleLanguageText @@ -875,23 +923,23 @@ updateOriginalTextModification -|answer| + |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. + 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 halt. ]. - answer == #acceptAsNew ifTrue:[ -self halt. ]. - ]. + answer isNil ifTrue:[^ self originalTextModifiedHolder value:false. ]. + answer == #accept ifTrue:[ + self halt. ]. + answer == #acceptAsNew ifTrue:[ + self halt. ]. + ]. ! ! !InternationalLanguageTranslationEditor methodsFor:'dialogs'! @@ -1012,7 +1060,7 @@ key := Dialog request:'New Key:'. key isEmpty ifTrue:[^self]. - (keyStringsToLanguageMappings includesKey:key) ifFalse:[ + (self includesKey:key) ifFalse:[ keyStringsToLanguageMappings addKey:key. modified := true. ]. @@ -1020,6 +1068,20 @@ self selectedKeyRow value:index ! +changeLastNameSpace + + |nameSpace defaultNameSpace| + + lastNameSpace notNil ifTrue:[defaultNameSpace := lastNameSpace name]. + nameSpace := Dialog requestNameSpace:'NameSpace:' title:'Search String in Name Space:' initialAnswer:defaultNameSpace. + nameSpace isNil ifTrue:[^self]. + nameSpace := Smalltalk at:nameSpace asSymbol. + nameSpace isNil ifTrue:[ + ^Dialog information:(resources string:'No such nameSpace exists.?') + ]. + lastNameSpace := nameSpace. +! + extractTranslationsFromClass |aClass newTranslations| @@ -1035,6 +1097,19 @@ self addAllTranslations:newTranslations. ! +extractTranslationsFromNameSpace + + |newTranslations| + + self changeLastNameSpace. + lastNameSpace isNil ifTrue:[^self.]. + newTranslations := OrderedCollection new. + lastNameSpace allClassesDo:[:eachClass | + newTranslations addAll:( self extractTranslationsFromClass:eachClass theNonMetaclass). + ]. + self addAllTranslations:newTranslations. +! + extractTranslationsFromProject |box projectID newTranslations| @@ -1067,6 +1142,35 @@ self addAllTranslations:newTranslations. ! +inspectCanvasMissingStrings + + |spec nameSpace missingStrings| + + missingStrings := OrderedCollection new. + nameSpace := Dialog requestNameSpace:'NameSpace:' title:'Specify NameSpace to look for missing strings' initialAnswer:nil. + nameSpace := Smalltalk at:nameSpace asSymbol. + nameSpace isNil ifTrue:[ + ^Dialog information:(resources string:'No such nameSpace exists.?') + ]. + + nameSpace allClassesDo:[:cls | + cls theMetaclass methodsDo:[:m | + m hasResource ifTrue:[ + (m resources includesKey:#canvas) ifTrue:[ + spec := (cls perform:m selector) decodeAsLiteralArray. + spec do:[:eachComponent | + eachComponent translationKeysDo:[:k | + (self includesKey: k) ifFalse:[ + missingStrings add: k. + Transcript showCR: k storeString, ' ', m printString]] + ] + ] + ] + ] + ]. + missingStrings asSet inspect +! + menuNew modified ifTrue:[ (Dialog @@ -1085,9 +1189,11 @@ menuOpen |aFilename| - aFilename := self requestFilename. - aFilename isNil ifTrue:[^ self ]. - self readResourceFile:aFilename + self withWaitCursorDo:[ + aFilename := self requestFilename. + aFilename isNil ifTrue:[^ self ]. + self readResourceFile:aFilename. + ] ! menuSave @@ -1161,8 +1267,10 @@ |rowSelectionIndex selectedKey| rowSelectionIndex := self selectedKeyRow value. + rowSelectionIndex isNil ifTrue:[^self]. rowSelectionIndex ~~ 0 ifTrue:[ selectedKey := keyStringsToLanguageMappings keyAt:rowSelectionIndex ifAbsent:nil. + selectedKey isNil ifTrue:[^self]. (Dialog confirm:(resources string:'Really remove key %1' with:selectedKey)) ifTrue:[ keyStringsToLanguageMappings removeKey:selectedKey. ]. @@ -1226,6 +1334,30 @@ monitoredApplication := nil. ]. ] fork. +! + +searchStringInLastNameSpace + + |selectedKey browser| + + selectedKey := self selectedKey. + selectedKey isNil ifTrue:[^Dialog information: 'No selected key']. + browser := NewSystemBrowser new "open". + browser allButOpen. + browser lastSearchPatterns first = selectedKey ifFalse:[ + browser lastSearchPatterns addFirst: selectedKey + ]. + lastNameSpace isNil ifTrue:[ + self changeLastNameSpace. + ]. + lastNameSpace notNil ifTrue:[ +"/ browser navigationState selectedClasses value: lastNameSpace allClasses. + browser navigationState nameSpaceFilter value: (OrderedCollection with:lastNameSpace name). + browser navigationState selectedNamespaces value: (OrderedCollection with:lastNameSpace name). + ]. + self withWaitCursorDo:[ + browser browseMenuMethodsWithString + ]. ! ! !InternationalLanguageTranslationEditor methodsFor:'menus dynamic'! @@ -1536,7 +1668,7 @@ currentLanguage -|colSelectionIndex | + |colSelectionIndex | colSelectionIndex := dataSetView selectedColIndex. ^colSelectionIndex > 1 ifTrue:[ shownLanguages at:colSelectionIndex-1 ] ifFalse:nil. @@ -1544,9 +1676,9 @@ exampleLanguageByDefault -^self shownLanguages isEmpty - ifTrue:[nil] - ifFalse:[self shownLanguages first] + ^self shownLanguages isEmpty + ifTrue:[nil] + ifFalse:[self shownLanguages first] ! hasFirstRowSelection @@ -1563,9 +1695,14 @@ ^ modified ! +includesKey: aKey + keyStringsToLanguageMappings isNil ifTrue:[^false]. + ^keyStringsToLanguageMappings includesKey:aKey +! + isSearchForSimilarTranslationEnabled -^self searchForSimilarTranslationEnableHolder value + ^self searchForSimilarTranslationEnableHolder value ! languageTextFromKey: aKeyIndex for: language @@ -1588,73 +1725,73 @@ shouldSearchForSimilarTranslation -self isSearchForSimilarTranslationEnabled ifFalse:[^false]. -(self languageTextHolder value notNil and:[self languageTextHolder value notEmpty]) ifTrue:[^false]. -(self hasLanguageSelection and:[self selectedKeyRow notNil]) ifFalse:[^false]. -^true + self isSearchForSimilarTranslationEnabled ifFalse:[^false]. + (self languageTextHolder value notNil and:[self languageTextHolder value notEmpty]) ifTrue:[^false]. + (self hasLanguageSelection and:[self selectedKeyRow notNil]) ifFalse:[^false]. + ^true ! ! !InternationalLanguageTranslationEditor methodsFor:'read/write resourceFile'! encoderAt: lang -self alwaysWriteUTF8Holder value ifTrue:[^CharacterEncoder encoderForUTF8]. -^keyStringsToLanguageMappings encoderAt: lang. + self alwaysWriteUTF8Holder value ifTrue:[^CharacterEncoder encoderForUTF8]. + ^keyStringsToLanguageMappings encoderAt: lang. ! printEditingWarningOn: aStream -aStream nextPutAll: ';'; - cr; - nextPutAll: '; WARNING:'; - cr; - nextPutAll: '; this file contains national characters'; - cr; - nextPutAll: '; DONT EDIT this file with an old vi !!'; - cr; - nextPutAll: ';'; - cr; - cr. + aStream nextPutAll: ';'; + cr; + nextPutAll: '; WARNING:'; + cr; + nextPutAll: '; this file contains national characters'; + cr; + nextPutAll: '; DONT EDIT this file with an old vi !!'; + cr; + nextPutAll: ';'; + cr; + cr. ! printEncoderFor: lang on: aStream -|characterEncoder encoderString| + |characterEncoder encoderString| -characterEncoder := self encoderAt: lang. -encoderString := characterEncoder isNil - ifTrue:[self requestEncoderStringFor: lang] - ifFalse:[characterEncoder nameOfEncoding printString]. + characterEncoder := self encoderAt: lang. + encoderString := characterEncoder isNil + ifTrue:[self requestEncoderStringFor: lang] + ifFalse:[characterEncoder nameOfEncoding printString]. -aStream nextPutAll: '#encoding'; - space; - nextPutAll: encoderString; - cr; - cr. + aStream nextPutAll: '#encoding'; + space; + nextPutAll: encoderString; + cr; + cr. ! printLanguage: lang on: aStream -self printEncoderFor: lang on: aStream. -self printEditingWarningOn: aStream. -self printLanguageMappingsFor: lang on: aStream. + self printEncoderFor: lang on: aStream. + self printEditingWarningOn: aStream. + self printLanguageMappingsFor: lang on: aStream. ! printLanguageMappingsFor: lang on: aStream -|orderedAssociations maxKeySize characterEncoder| + |orderedAssociations maxKeySize characterEncoder| -characterEncoder := self encoderAt: lang. -characterEncoder isNil ifTrue:[ characterEncoder := CharacterEncoder::NullEncoder ]. -orderedAssociations := keyStringsToLanguageMappings orderedLanguageMappingsAssociationsFor: lang. + characterEncoder := self encoderAt: lang. + characterEncoder isNil ifTrue:[ characterEncoder := CharacterEncoder::NullEncoder ]. + orderedAssociations := keyStringsToLanguageMappings orderedLanguageMappingsAssociationsFor: lang. -maxKeySize := keyStringsToLanguageMappings maxKeySizeForLanguage: lang. + maxKeySize := keyStringsToLanguageMappings maxKeySizeForLanguage: lang. -orderedAssociations do:[:association | - aStream nextPutAll: (association key storeString paddedTo: maxKeySize) ; - nextPutAll: (String new: 10); - nextPutAll: (characterEncoder encodeString: association value) storeString; - cr. - ]. + orderedAssociations do:[:association | + aStream nextPutAll: (association key storeString paddedTo: maxKeySize) ; + nextPutAll: (String new: 10); + nextPutAll: (characterEncoder encodeString: association value) storeString; + cr. + ]. ! readResourceFile:aFilename asLanguage:lang @@ -1717,14 +1854,14 @@ saveResourceFile: aFilename for: lang -|aStream | + |aStream | -keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename. -aStream := FileStream newFileNamed: aFilename. -self printLanguage: lang on: aStream. -aStream flush; - close. -DialogBox information: 'The resource file for the language ', lang printString storeString, ' was saved in the file: ', aFilename nameString + keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename. + aStream := FileStream newFileNamed: aFilename. + self printLanguage: lang on: aStream. + aStream flush; + close. + DialogBox information: 'The resource file for the language ', lang printString storeString, ' was saved in the file: ', aFilename nameString ! ! !InternationalLanguageTranslationEditor methodsFor:'specs-dynamic'! @@ -1773,12 +1910,12 @@ ! languageTextAccepted -|nextRowIndex| -keyStringsToLanguageMappings size = self selectedKeyRow value - ifTrue:[ self updateLanguageTextModification.] - ifFalse:[ - nextRowIndex := self selectedKeyRow value + 1. - self selectedKeyRow value: nextRowIndex]. + |nextRowIndex| + keyStringsToLanguageMappings size = self selectedKeyRow value + ifTrue:[ self updateLanguageTextModification.] + ifFalse:[ + nextRowIndex := self selectedKeyRow value + 1. + self selectedKeyRow value: nextRowIndex]. ! pastePreviousTranslationInLanguageText