*** empty log message ***
authorClaus Gittinger <cg@exept.de>
Mon, 06 Mar 2006 19:58:27 +0100
changeset 2032 cc2edbb9ebfc
parent 2031 85947c4c6502
child 2033 2c1264ae2c1c
*** empty log message ***
Tools__InternationalLanguageTranslationEditor.st
--- a/Tools__InternationalLanguageTranslationEditor.st	Mon Mar 06 19:27:26 2006 +0100
+++ b/Tools__InternationalLanguageTranslationEditor.st	Mon Mar 06 19:58:27 2006 +0100
@@ -10,8 +10,9 @@
 		languageShownHolders dataSetView lastExtractedClass
 		lastExtractedApplicationClass stopApplicationIconVisibleHolder
 		monitoredApplication originalTextModifiedHolder
-		languageTextModifiedHolder inSingleFileMode'
-	classVariableNames:'LastExtractedClass LastExtractedApplicationClass'
+		languageTextModifiedHolder inSingleFileMode lastExtractedProject'
+	classVariableNames:'LastExtractedClass LastExtractedApplicationClass
+		LastExtractedProject'
 	poolDictionaries:''
 	category:'Interface-UIPainter'
 !
@@ -24,7 +25,8 @@
 !
 
 Collection subclass:#KeyStringsToLanguageMappings
-	instanceVariableNames:'keys languageMappings languages'
+	instanceVariableNames:'keys keyInfo perLanguageInfo perLanguageMappings languageMappings
+		languages'
 	classVariableNames:''
 	poolDictionaries:''
 	privateIn:InternationalLanguageTranslationEditor
@@ -329,6 +331,14 @@
                   translateLabel: true
                 )
                (MenuItem
+                  label: 'Extract from Project...'
+                  itemValue: extractTranslationsFromProject
+                  translateLabel: true
+                )
+               (MenuItem
+                  label: '-'
+                )
+               (MenuItem
                   label: 'Run Application and Collect Translations...'
                   itemValue: runApplicationAndCollectTranslations
                   translateLabel: true
@@ -599,24 +609,40 @@
 
     lastExtractedClass := LastExtractedClass := aClass.
 
+    newTranslations := self extractTranslationsFromClass:aClass.
+    self addAllTranslations:newTranslations.
+!
+
+extractTranslationsFromProject
+    |box projectID newTranslations|
+
+    box := ListSelectionBox new.
+"/    box useComboBoxWithList:(Smalltalk allProjectIDs).
+    box title:(resources string:'Project to extract translations from:').
+    box list:Smalltalk allProjectIDs.
+    box okAction:[:sel | projectID := sel].
+    box initialText:(lastExtractedProject ? LastExtractedProject).
+    box label:'Find Translations in Project'.
+
+    box showAtPointer.
+
+    projectID notNil ifTrue:[
+        projectID := projectID withoutSeparators asSymbol.
+    ].
+    projectID isEmptyOrNil ifTrue:[^ self ].
+
+    lastExtractedProject := LastExtractedProject := projectID.
+
     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 ).
-        ].
+    Smalltalk allClassesDo:[:eachClass |
+        eachClass theNonMetaclass package == projectID ifTrue:[
+"/ eachClass isLoaded ifTrue:[ self halt. ].
+            newTranslations addAll:( self extractTranslationsFromClass:eachClass theNonMetaclass).
+        ]
     ].
 
-    newTranslations := newTranslations select:[:k | k notEmpty and:[k isBlank not]].
-    newTranslations := newTranslations select:[:k | (keyStringsToLanguageMappings includesKey:k) not].
-    newTranslations notEmpty ifTrue:[
-        newTranslations := newTranslations asSortedCollection.
-        keyStringsToLanguageMappings addKeys:newTranslations.
-        modified := true.
-    ].
+    self addAllTranslations:newTranslations.
 !
 
 menuNew
@@ -853,6 +879,34 @@
 
 !InternationalLanguageTranslationEditor methodsFor:'private-key extraction'!
 
+addAllTranslations:newTranslations
+    |newTranslationKeys|
+
+    newTranslationKeys := newTranslations select:[:k | k notEmpty and:[k isBlank not]].
+    newTranslationKeys := newTranslationKeys select:[:k | (keyStringsToLanguageMappings includesKey:k) not].
+    newTranslationKeys notEmpty ifTrue:[
+        newTranslationKeys := newTranslationKeys asSortedCollection.
+        keyStringsToLanguageMappings addKeys:newTranslationKeys.
+        modified := true.
+    ].
+!
+
+extractTranslationsFromClass:aClass
+    |newTranslations|
+
+    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 ).
+        ].
+    ].
+    ^ newTranslations
+!
+
 extractTranslationsFromHelpSpecMethod:aMethod
     |codeStrings matcher parseTree resourceKeys|
 
@@ -1209,17 +1263,17 @@
 addLanguage:lang
     (languages includes:lang) ifFalse:[
         languages add:lang.
-        languageMappings at:lang put:(Dictionary new).
+        perLanguageMappings at:lang put:(Dictionary new).
     ]
 !
 
 at:aKey language:language
-    ^ (languageMappings at:language) at:aKey ifAbsent:nil
+    ^ (perLanguageMappings at:language) at:aKey ifAbsent:nil
 !
 
 at:aKey language:language put:value
     self addKey:aKey.
-    ^ (languageMappings at:language) at:aKey put:value
+    ^ (perLanguageMappings at:language) at:aKey put:value
 !
 
 keyAt:index
@@ -1240,7 +1294,7 @@
 
 removeKey:aKey
     keys remove:aKey ifAbsent:[].
-    languageMappings do:[:eachMapping |
+    perLanguageMappings do:[:eachMapping |
         eachMapping removeKey:aKey ifAbsent:[].
     ].
     self changed.
@@ -1266,7 +1320,8 @@
 
     keys := OrderedSet new.
     languages := OrderedCollection new.
-    languageMappings := Dictionary new.
+    perLanguageMappings := Dictionary new.
+    perLanguageInfo := Dictionary new.
 
     self addLanguage:#'de'.
     self addLanguage:#'fr'.
@@ -1300,7 +1355,7 @@
 !InternationalLanguageTranslationEditor::KeyStringsToLanguageMappings methodsFor:'private'!
 
 atLanguage:lang
-    ^ languageMappings at:lang
+    ^ perLanguageMappings at:lang
 !
 
 atLanguageIndex:idx
@@ -1308,6 +1363,17 @@
 
     lang := languages at:idx.
     ^ self atLanguage:lang.
+!
+
+mappingAtLanguage:lang
+    ^ perLanguageMappings at:lang
+!
+
+mappingAtLanguageIndex:idx
+    |lang|
+
+    lang := languages at:idx.
+    ^ self mappingAtLanguage:lang.
 ! !
 
 !InternationalLanguageTranslationEditor::KeyStringsToLanguageMappings methodsFor:'queries'!
@@ -1327,11 +1393,14 @@
 !InternationalLanguageTranslationEditor::LanguageMappingRow methodsFor:'accessing'!
 
 atLanguage:language
-    ^ (mappings atLanguage:language) at: key ifAbsent:nil
+    |translation|
+
+    translation := (mappings mappingAtLanguage:language) at:key ifAbsent:nil.
+    ^ translation isNil ifTrue:nil ifFalse:[translation printString]
 !
 
 columnAt:columnNr
-    ^ (mappings atLanguageIndex:columnNr-1) at: key ifAbsent:nil
+    ^ (mappings mappingAtLanguageIndex:columnNr-1) at: key ifAbsent:nil
 !
 
 key:something
@@ -1339,7 +1408,7 @@
 !
 
 keyString
-    ^ key
+    ^ key printString
 !
 
 mappings:something