# HG changeset patch # User Claus Gittinger # Date 1461868848 -7200 # Node ID 4de194c0ee744f43f0dd15bfc62e6eefb65e34e7 # Parent 74fcc1bf0fab5cfa59e1538baf97daf103647192 #FEATURE by cg class: Tools::InternationalLanguageTranslationEditor added: #isLiteralStringOrStringConcatenation: #literalStringOrStringConcatenation: changed: #extractTranslationsFromMethodsCode: also care for constructed resource strings (foo , bar) diff -r 74fcc1bf0fab -r 4de194c0ee74 Tools__InternationalLanguageTranslationEditor.st --- a/Tools__InternationalLanguageTranslationEditor.st Thu Apr 28 20:16:55 2016 +0200 +++ b/Tools__InternationalLanguageTranslationEditor.st Thu Apr 28 20:40:48 2016 +0200 @@ -2291,6 +2291,7 @@ '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' ). @@ -2306,23 +2307,14 @@ sel := aNode selector. ((sel startsWith:'string:') or:[(sel startsWith:'at:') or:[sel startsWith:'stringWithCRs:']]) ifTrue:[ keyStringArgNode := aNode arguments at:1. - keyStringArgNode isLiteral ifTrue:[ - keyStringArg := keyStringArgNode value. - keyStringArg isString ifTrue:[ - resourceKeys add:keyStringArg. - ] ifFalse:[ - Transcript - showCR:(resources - string:'Cannot derive resourceKey from non-string: %1 in %2' - with:keyStringArgNode formattedCode - with:aMethod whoString). - ]. + (keyStringArg := self literalStringOrStringConcatenation:keyStringArgNode) notNil ifTrue:[ + resourceKeys add:keyStringArg. ] ifFalse:[ Transcript - showCR:(resources - string:'Cannot derive resourceKey from non-literal: %1 in %2' - with:keyStringArgNode formattedCode - with:aMethod whoString). + showCR:(resources + string:'[LanguageTranslator] warning: Cannot derive resourceKey from non-string: %1 in %2' + with:keyStringArgNode formattedCode + with:aMethod whoString). ]. ]. aNode @@ -2373,6 +2365,38 @@ spec acceptVisitor:visitor. ^ visitor translatedLabels +! + +isLiteralStringOrStringConcatenation:aParseNode + aParseNode isLiteralString ifTrue:[^ true]. + (aParseNode isMessage and:[aParseNode selector == #,]) ifTrue:[ + self halt. + ]. + ^ false +! + +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 + ]. + ]. + ^ nil ! ! !InternationalLanguageTranslationEditor methodsFor:'queries'!