# HG changeset patch # User Claus Gittinger # Date 1141671507 -3600 # Node ID cc2edbb9ebfcc68283411ae881e65601affce3d2 # Parent 85947c4c6502081ee951a39ccdbcb70f6fcc1a91 *** empty log message *** diff -r 85947c4c6502 -r cc2edbb9ebfc 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