--- 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
+ "
+
+ <resource: #menu>
+
+ ^
+ #(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