--- 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'!