#FEATURE by cg
authorClaus Gittinger <cg@exept.de>
Thu, 28 Apr 2016 20:40:48 +0200
changeset 3284 4de194c0ee74
parent 3283 74fcc1bf0fab
child 3285 5b8697869e72
#FEATURE by cg class: Tools::InternationalLanguageTranslationEditor added: #isLiteralStringOrStringConcatenation: #literalStringOrStringConcatenation: changed: #extractTranslationsFromMethodsCode: also care for constructed resource strings (foo , bar)
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'!