[etoys-dev] Etoys: Multilingual-Richo.5.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun May 23 09:34:56 EDT 2010
A new version of Multilingual was added to project Etoys:
http://source.squeak.org/etoys/Multilingual-Richo.5.mcz
==================== Summary ====================
Name: Multilingual-Richo.5
Author: Richo
Time: 22 May 2010, 4:31:56 pm
UUID: c686a518-4904-194a-b9f5-10e8b9291f8e
Ancestors: Multilingual-Richo.4
* Removed some of the stuff that now belong to GetText.
=============== Diff against Multilingual-Richo.2 ===============
Item was changed:
- SystemOrganization addCategory: #'Multilingual-Collection'!
SystemOrganization addCategory: #'Multilingual-Display'!
SystemOrganization addCategory: #'Multilingual-Encodings'!
SystemOrganization addCategory: #'Multilingual-ImmPlugin'!
SystemOrganization addCategory: #'Multilingual-Languages'!
SystemOrganization addCategory: #'Multilingual-Scanning'!
SystemOrganization addCategory: #'Multilingual-TextConversion'!
- SystemOrganization addCategory: #'Multilingual-Editor'!
Item was removed:
- ----- Method: GetTextExporter2>>formatReplacements (in category 'private') -----
- formatReplacements
- | replacements |
- replacements := OrderedCollection new.
- replacements add: '\' -> '\\'.
- replacements add: String cr -> '\n'.
- replacements add: String tab -> '\t'.
- replacements add: '"' -> '\"'.
- ^ replacements!
Item was removed:
- ----- Method: LanguageEditor>>removeTranslatedButUnusedStrings (in category 'stef') -----
- removeTranslatedButUnusedStrings
- (self confirm: 'Are you sure that you want to remove unused strings?' translated)
- ifFalse: [^ self].
- translationsList getList
- do: [:each |
- | timesUsed |
- timesUsed := self numberOfTimesStringIsUsed: each.
- Transcript show: each.
- Transcript show: timesUsed printString;
- cr.
- timesUsed isZero
- ifTrue: [self translator removeTranslationFor: each]]!
Item was removed:
- ----- Method: LanguageEditor class>>initCheckMethods (in category 'initialize-release') -----
- initCheckMethods
- "LanguageEditor initCheckMethods"
-
- | registry |
- registry := Dictionary new.
- registry
- at: 'es' put: #checkSpanishPhrase:translation:;
- yourself.
- ^registry!
Item was removed:
- ----- Method: GetTextExporter2>>stream (in category 'accessing') -----
- stream
- ^ stream!
Item was removed:
- ----- Method: GetTextExporter2 classSide>>keys (in category 'utilities') -----
- keys
- | categories |
- categories := Dictionary new.
- GetTextExporter2 new appendTranslations: categories.
- ^ categories values
- inject: Set new
- into: [:set :next | set addAll: next keys;
- yourself]!
Item was removed:
- ----- Method: LanguageEditor>>createStatusbar (in category 'initialization - statusbar') -----
- createStatusbar
- "create the statusbar for the receiver"
- | statusbar |
- statusbar := self createRow.
- statusbar addMorph: ((UpdatingStringMorph on: self selector: #status) growable: true;
- useStringFormat;
- hResizing: #spaceFill;
- stepTime: 2000).
- ^ statusbar!
Item was removed:
- ----- Method: GetTextExporter2>>exportTranslator: (in category 'exporting') -----
- exportTranslator: translator
- "Export translation files. the file extention is 'po', or 'pot' if translator is nil "
- "GetTextExporter2 new exportTranslator: NaturalLanguageTranslator current "
- | domains |
- domains := Dictionary new.
- self appendTranslations: domains.
- domains
- keysAndValuesDo: [:domainName :value |
- self
- export: value
- translator: translator
- domain: domainName]!
Item was removed:
- ----- Method: LanguageEditor>>initializeNewerKeys (in category 'initialization') -----
- initializeNewerKeys
-
- newerKeys _ Set new.
- !
Item was removed:
- ----- Method: LanguageEditor>>selectAllTranslation (in category 'gui methods') -----
- selectAllTranslation
- selectedTranslations := (1 to: self translations size) asIdentitySet.
- self changed: #allSelections!
Item was removed:
- ----- Method: GetTextExporter2>>exportTemplate (in category 'exporting') -----
- exportTemplate
- "GetTextExporter2 new exportTemplate"
- self exportTranslator: nil!
Item was removed:
- ----- Method: GetTextExporter2 classSide>>verifyExport (in category 'utilities') -----
- verifyExport
- "Same as #verifyMsgID: but it writes / reads .po files actually"
- "GetTextExporter2 verifyExport"
- "InternalTranslator removeLocaleID: (LocaleID isoString: 'test-US')"
- | src dst localeID |
- localeID := LocaleID isoString: 'test-US'.
- self verifyMsgID: localeID.
- src := localeID translator.
- GetTextExporter2 new exportTranslator: src.
- InternalTranslator removeLocaleID: localeID.
- dst := localeID translator.
- GetTextImporter import: dst allDirectory: FileDirectory default!
Item was removed:
- ----- Method: TranslatedReceiverFinder>>nonLiteralReceivers (in category 'accessing') -----
- nonLiteralReceivers
- "self new nonLiteralReceivers"
- | receivers |
- "Answer method references of non literal senders of #translated"
- ^ (SystemNavigation default allCallsOn: #translated)
- select: [:message |
- receivers := OrderedCollection new.
- self search: #translated messageNode: message decompile addTo: receivers.
- receivers
- anySatisfy: [:each | (each receiver isMemberOf: LiteralNode) not]]!
Item was removed:
- ----- Method: GetTextImporter>>setContentType: (in category 'parsing') -----
- setContentType: lineString
- "self new setContentType: 'Content-Type: text/plain; charset=utf-8'"
- | reader charSet |
- reader := lineString readStream.
- reader upTo: $=.
- charSet := reader upTo: $\.
- stream
- converter: (TextConverter newForEncoding: charSet)!
Item was removed:
- ----- Method: LanguageEditor>>searchTranslation (in category 'gui methods') -----
- searchTranslation
- | search |
- search := FillInTheBlank request: 'search for' translated initialAnswer: ''.
- (search isNil
- or: [search isEmpty])
- ifTrue: [""
- self beep.
- ^ self].
- ""
- self searchTranslation: search!
Item was removed:
- ----- Method: LanguageEditor>>codeSelectedTranslationAsMimeString (in category 'gui methods') -----
- codeSelectedTranslationAsMimeString
- | keys code tmpStream s2 gzs cont |
- keys := selectedTranslations
- collect: [:key | self translations at: key].
- code := String
- streamContents: [:aStream | self translator fileOutOn: aStream keys: keys withBOM: false].
-
- tmpStream _ MultiByteBinaryOrTextStream on: ''.
- tmpStream converter: UTF8TextConverter new.
- tmpStream nextPutAll: code.
- s2 _ RWBinaryOrTextStream on: ''.
- gzs := GZipWriteStream on: s2.
- tmpStream reset.
- gzs nextPutAll: (tmpStream binary contentsOfEntireFile asString) contents.
- gzs close.
- s2 reset.
-
- cont _ String streamContents: [:strm |
- strm nextPutAll: '"Gzip+Base64 encoded translation for;'; cr.
- strm nextPutAll: '#('.
- keys do: [:each | strm nextPutAll: '''', each, ''' '.].
- strm nextPutAll: ')"'; cr; cr.
- strm nextPutAll: 'NaturalLanguageTranslator loadForLocaleIsoString: '.
- strm nextPut: $'.
- strm nextPutAll: translator localeID isoString.
- strm nextPut: $'.
- strm nextPutAll: ' fromGzippedMimeLiteral: '.
- strm nextPut: $'.
- strm nextPutAll: (Base64MimeConverter mimeEncode: s2) contents.
- strm nextPutAll: '''.'.
- strm cr.
- ].
-
- (StringHolder new contents: cont)
- openLabel: 'exported codes in Gzip+Base64 encoding' translated!
Item was removed:
- ----- Method: LanguageEditor>>getTextExportTemplate (in category 'gui methods') -----
- getTextExportTemplate
- Cursor wait
- showWhile: [GetTextExporter2 new exportTemplate] !
Item was removed:
- ----- Method: LanguageEditor>>translationsFilterWording (in category 'gui methods') -----
- translationsFilterWording
- ^ (self translationsFilter isEmpty
- ifTrue: ['filter' translated]
- ifFalse: ['filtering: {1}' translated format:{self translationsFilter}]) !
Item was removed:
- ----- Method: GetTextExporter>>exportPhrase:translation: (in category 'private-translations') -----
- exportPhrase: phraseString translation: translationString
- phraseString isEmpty
- ifTrue: [^ self].
- self exportTag: 'msgid' msg: phraseString.
- self exportTag: 'msgstr' msg: translationString.
- stream cr!
Item was removed:
- ----- Method: LanguageEditor>>refreshTranslations (in category 'updating') -----
- refreshTranslations
- "refresh the translations panel"
- self selectedTranslation: 0.
- translations := nil.
- self changed: #translations.
- !
Item was removed:
- ----- Method: LanguageEditor>>translator (in category 'private') -----
- translator
- ^translator!
Item was removed:
- ----- Method: LanguageEditor>>translations (in category 'accessing') -----
- translations
- "answet the translator's translations"
- | allTranslations filterString |
- translations ifNotNil: [^translations].
- allTranslations := self translator translations keys.
- ""
- filterString := self translationsFilter.
- ""
- filterString isEmpty
- ifFalse: [allTranslations := allTranslations
- select: [:each | ""
- ('*' , filterString , '*' match: each)
- or: ['*' , filterString , '*'
- match: (self translator translate: each)]]].
- ""
- ^ translations _ allTranslations asSortedCollection asArray!
Item was removed:
- ----- Method: LanguageEditor class>>on: (in category 'instance creation') -----
- on: localeID
- "answer an instance of the receiver on aLanguage"
- ^ self new
- initializeOn: (InternalTranslator cachedTranslations
- at: localeID
- ifAbsent: [self
- error: ('Translator for {1} is not found' translated format: {localeID})])!
Item was removed:
- ----- Method: GetTextExporter>>exportHeader (in category 'private-headers') -----
- exportHeader
- self exportTag: 'msgid' msg: ''.
- self exportTag: 'msgstr' msg: ''.
- self createHeaders
- do: [:each | self exportHeaderLineKey: each key value: each value].
- stream cr; cr!
Item was removed:
- ----- Method: LanguageEditor>>addTranslation (in category 'gui methods') -----
- addTranslation
- "translate a phrase"
- | phrase |
- phrase := FillInTheBlank
- request: 'enter the original:' translated
- initialAnswer: ''.
-
- (phrase isNil
- or: [phrase = ''])
- ifTrue: [""
- self beep.
- ^ self].
- ""
- self translatePhrase: phrase!
Item was removed:
- ----- Method: GetTextExporter>>createHeaders (in category 'private-headers') -----
- createHeaders
- | headers |
- headers := OrderedCollection new.
- headers add: 'Project-Id-Version' -> 'eToys'.
- headers add: 'POT-Creation-Date' -> self currentDateAndTime.
- headers add: 'PO-Revision-Date' -> self currentDateAndTime.
- headers add: 'Last-Translator' -> ''.
- headers add: 'Language-Team' -> ''.
- headers add: 'MIME-Version' -> '1.0'.
- headers add: 'Content-Type' -> ('text/plain; charset=', stream converter class encodingNames first).
- headers add: 'Content-Transfer-Encoding' -> '8bit'.
- ^ headers!
Item was removed:
- ----- Method: LanguageEditor>>initializeStatusbar (in category 'initialization - statusbar') -----
- initializeStatusbar
- "initialize the receiver's statusbar"
- self
- addMorph: self createStatusbar
- frame: (0 @ 0.93 corner: 1 @ 1)!
Item was removed:
- ----- Method: GetTextExporter2 classSide>>verifyMsgID: (in category 'utilities') -----
- verifyMsgID: localeID
- "GetTextExporter2 verifyMsgID: (LocaleID isoString: 'test-US')"
- "InternalTranslator removeLocaleID: (LocaleID isoString: 'test-US')"
- "Test gettext keyword extract function without file I/O.
- A language named <langName> will be made. And
- all possible translated words are shown with extra X charactor like
- 'XwordX' in the language."
- | src |
- InternalTranslator removeLocaleID: localeID.
- src := localeID translator.
- self keys
- do: [:key | src generics at: key put: 'X' , key , 'X']!
Item was removed:
- ----- Method: GetTextImporter classSide>>cleanUpUnnecessaryPhrases (in category 'utilities') -----
- cleanUpUnnecessaryPhrases
- | keys refuse replaceBlock reader writer char result |
- "GetTextImporter cleanUpUnnecessaryPhrases"
- ""
- "Collect wrong phrases"
- keys := InternalTranslator allKnownPhrases copy keys.
- refuse := Set new.
- "replaceBlock value: 'te\\nst'."
- replaceBlock := [:aString |
- reader := aString readStream.
- writer := '' writeStream.
- [reader atEnd]
- whileFalse: [char := reader next.
- (char = $\
- and: [reader peek = $\])
- ifFalse: [writer nextPut: char]].
- writer contents].
- keys
- do: [:each |
- result := replaceBlock value: each.
- (result ~= each
- and: [keys includes: result])
- ifTrue: [refuse add: each].
- result := GetTextImporter new formatString: each.
- (result ~= each
- and: [keys includes: result])
- ifTrue: [refuse add: each]].
- ""
- "Remove from translated"
- InternalTranslator cachedTranslations
- do: [:each | refuse
- do: [:key | each translations
- removeKey: key
- ifAbsent: []]].
- ""
- "Remove from untranslated"
- refuse
- do: [:key | InternalTranslator allKnownPhrases
- removeKey: key
- ifAbsent: []]!
Item was removed:
- ----- Method: GetTextExporter2>>translationFor:in: (in category 'private') -----
- translationFor: aKey in: translator
- translator ifNil: [^''].
- translator translations at: aKey ifPresent: [:s | ^s].
- "If we have old camelCase translations, make space-separated words"
- translator translations at: aKey toCamelCase ifPresent: [:s |
- (s includes: Character space) ifTrue: [^s].
- ^s fromCamelCase].
- ^''!
Item was removed:
- ----- Method: LanguageEditor>>translationsMenu: (in category 'gui methods') -----
- translationsMenu: aMenu
- ^ aMenu add: 'remove (x)' translated action: #removeTranslation;
- add: 'where (E)' translated action: #browseMethodsWithTranslation;
- add: 'select all' translated action: #selectAllTranslation;
- add: 'deselect all' translated action: #deselectAllTranslation;
- add: 'select changed keys' translated action: #selectNewerKeys;
- add: 'export selection' translated action: #codeSelectedTranslation;
- add: 'export selection in do-it form' translated action: #codeSelectedTranslationAsMimeString;
- add: 'reset changed keys' translated action: #resetNewerKeys;
- yourself!
Item was removed:
- ----- Method: LanguageEditor>>createTranslationsToolbar (in category 'initialization - toolbar') -----
- createTranslationsToolbar
- "create a toolbar for the receiver"
- | toolbar |
- toolbar := self createRow.
- ""
- toolbar
- addMorphBack: (self
- createUpdatingButtonWording: #translationsFilterWording
- action: #filterTranslations
- help: 'Filter the translations list.').
- toolbar addTransparentSpacerOfSize: 5 @ 0.
- ""
- toolbar
- addMorphBack: (self
- createButtonLabel: 'search'
- action: #searchTranslation
- help: 'Search for a translation containing...').
- toolbar addTransparentSpacerOfSize: 5 @ 0.
- toolbar
- addMorphBack: (self
- createButtonLabel: 'remove'
- action: #removeTranslation
- help: 'Remove the selected translation. If none is selected, ask for the one to remove.').
- ""
- toolbar addTransparentSpacerOfSize: 5 @ 0.
- toolbar
- addMorphBack: (self
- createButtonLabel: 'where'
- action: #browseMethodsWithTranslation
- help: 'Launch a browser on all methods that contain the phrase as a substring of any literal String.').
- toolbar addTransparentSpacerOfSize: 5 @ 0.
- toolbar
- addMorphBack: (self
- createButtonLabel: 'r-unused'
- action: #removeTranslatedButUnusedStrings
- help: 'Remove all the strings that are not used by the system').
- toolbar addTransparentSpacerOfSize: 5 @ 0.
- toolbar
- addMorphBack: (self
- createButtonLabel: 'add '
- action: #addTranslation
- help: 'Add a new phrase').
-
- ^ toolbar!
Item was removed:
- ----- Method: GetTextExporter2>>export:translator:domain: (in category 'private') -----
- export: literals translator: translator domain: domainName
- | fileName |
- "Export a gettext file in a category. literals is a dictionary of keyword -> #(MethodReference...) in the textDomain."
- fileName := self dirNameDomain: domainName translator: translator.
- [stream := FileStream forceNewFileNamed: fileName.
- stream lineEndConvention: #lf.
- stream converter: UTF8TextConverter new.
- self exportHeader: domainName.
- self exportInformation: self createExtraInformation.
- self exportBody: literals translator: translator]
- ensure: [stream close]!
Item was removed:
- ----- Method: LanguageEditor>>okToChange (in category 'updating') -----
- okToChange
- "Allows a controller to ask this of any model"
- self selectedTranslation isZero
- ifTrue: [^ true].
- ""
- translationText hasUnacceptedEdits
- ifFalse: [^ true].
- ^ (CustomMenu confirm: 'Discard the changes to currently selected translated phrase?' translated)
- and: [""
- translationText hasUnacceptedEdits: false.
- true]!
Item was removed:
- ----- Method: GetTextExporter>>formatReplacements (in category 'private') -----
- formatReplacements
- | replacements |
- replacements := OrderedCollection new.
- replacements add: '\' -> '\\'.
- replacements add: String cr -> '\n'.
- replacements add: String tab -> '\t'.
- replacements add: '"' -> '\"'.
- ^ replacements!
Item was removed:
- ----- Method: LanguageEditor class>>ensureVisibilityOfWindow: (in category 'private') -----
- ensureVisibilityOfWindow: aWindow
- "private - activate the window"
- | |
- aWindow expand.
- aWindow comeToFront.
- ""
- aWindow
- right: (aWindow right min: World right).
- aWindow
- bottom: (aWindow bottom min: World bottom).
- aWindow
- left: (aWindow left max: World left).
- aWindow
- top: (aWindow top max: World top).
- ""
- aWindow flash; flash!
Item was removed:
- ----- Method: LanguageEditor>>removeTranslation (in category 'gui methods') -----
- removeTranslation
- "remove the selected translation"
- | translation |
- self selectedTranslation isZero
- ifTrue: [""
- self beep.
- self inform: 'select the translation to remove' translated.
- ^ self].
- ""
- translation := self translations at: self selectedTranslation.
- ""
- (self
- confirm: ('Removing "{1}".
- Are you sure you want to do this?' translated format: {translation}))
- ifFalse: [^ self].
- ""
- self translator removeTranslationFor: translation.
- self refreshBoth!
Item was removed:
- Object subclass: #GetTextInterchange
- instanceVariableNames: 'language stream'
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Multilingual-Editor'!
Item was removed:
- ----- Method: LanguageEditor>>checkSpanishPhrase:translation: (in category 'private') -----
- checkSpanishPhrase: phraseString translation: translationString
- "check the translation and aswer a string with a comment or a
- nil meaning no-comments"
- | superResult |
- superResult := self checkPhrase: phraseString translation: translationString.
- superResult isNil
- ifFalse: [^ superResult].
- "For some reason, MCInstaller couldn't read Spanish character. "
- "((translationString includes: $?)
- and: [(translationString includes: $¿) not])
- ifTrue: [^ '¿Olvidó el signo de pregunta?'].
- ((translationString includes: $!!)
- and: [(translationString includes: $¡) not])
- ifTrue: [^ '¿Olvidó el signo de admiración?'].
- "
- ^ nil
- !
Item was removed:
- ----- Method: GetTextExporter2>>exportBody:translator: (in category 'file out') -----
- exportBody: literals translator: translator
- "Export a gettext file body. literals is a dictionary of keyword ->
- #(MethodReference...) in the textDomain."
- "Build {sortKey. comment. msgid } to optimize sorting (getting category is
- too slow).
- If there are two or more methods for a mgsid, only first method
- (alphabetical) is used for sorting."
- | sorted msgid sortedMethods category sortKey comment triplets commentUnderLined |
- triplets := literals associations
- collect: [:assoc |
- msgid := assoc key.
- sortedMethods := assoc value asArray sort.
- category := (Smalltalk at: sortedMethods first classSymbol) category asString.
- sortKey := category , ',' , sortedMethods first printString , ',' , msgid.
- comment := (sortedMethods
- collect: [:each | each actualClass asString , '>>' , each methodSymbol asString])
- inject: category
- into: [:result :methodName | result , ',' , methodName].
- "Replace white spaces to _ because gettext tool might
- replace a space to a new line some times, and it makes
- difficult to take a diff."
- commentUnderLined := comment copyReplaceAll: ' ' with: '_'.
- Array
- with: sortKey
- with: commentUnderLined
- with: msgid].
- "Sort and output the words"
- sorted := triplets
- sort: [:a :b | a first <= b first].
- sorted
- do: [:triplet |
- comment := triplet second.
- msgid := triplet third.
- self exportRecordHeader: comment.
- self
- exportPhrase: msgid
- translation: (self translationFor: msgid in: translator)]!
Item was removed:
- ----- Method: LanguageEditor class>>unload (in category 'initialize-release') -----
- unload
- "the receiver is being unloaded"
- (TheWorldMenu respondsTo: #registerOpenCommand:)
- ifTrue: [""
- TheWorldMenu unregisterOpenCommand: 'Language Editor'.
- TheWorldMenu unregisterOpenCommand: 'Language Editor for...'] !
Item was removed:
- ----- Method: LanguageEditor>>translation: (in category 'accessing') -----
- translation: aStringOrText
- "change the translation for the selected phrase"
- | phrase |
- self selectedTranslation isZero
- ifTrue: [^ self].
- phrase _ self translations at: self selectedTranslation.
- translator
- phrase: phrase
- translation: aStringOrText asString.
- newerKeys add: phrase.
- ^ true!
Item was removed:
- ----- Method: GetTextExporter>>exportTranslations (in category 'private-translations') -----
- exportTranslations
- | keys size |
- keys := language translations keys asArray sort.
- size := keys size.
- ProgressInitiationException
- display: 'Exporting translated phrases as a gettext file.'
- during: [:bar | 1
- to: size
- do: [:index |
- self
- exportPhrase: (keys at: index)
- translation: (language translations
- at: (keys at: index)).
- bar value: index / size]]!
Item was removed:
- ----- Method: GetTextExporter>>exportTag:singleLine: (in category 'private') -----
- exportTag: tag singleLine: aString
- stream nextPutAll: tag.
- stream space.
- stream nextPut: $".
- stream
- nextPutAll: (self formatString: aString).
- stream nextPut: $".
- stream cr!
Item was removed:
- ----- Method: LanguageEditor>>printHeaderReportOn: (in category 'reporting') -----
- printHeaderReportOn: aStream
- "append to aStream a header report of the receiver with swiki
- format"
- aStream nextPutAll: '!!!!';
-
- nextPutAll: ('Language: {1}' translated format: {self translator localeID isoString});
- cr.
-
- aStream nextPutAll: '- ';
-
- nextPutAll: ('{1} translated phrases' translated format: {self translator translations size});
- cr.
-
- aStream nextPutAll: '- ';
-
- nextPutAll: ('{1} untranslated phrases' translated format: {self translator untranslated size});
- cr.
-
- aStream cr; cr!
Item was removed:
- ----- Method: LanguageEditor>>selectedTranslationsAt:put: (in category 'accessing') -----
- selectedTranslationsAt: index put: value
- value = true
- ifTrue: [selectedTranslations add: index]
- ifFalse: [selectedTranslations
- remove: index
- ifAbsent: []]!
Item was removed:
- ----- Method: LanguageEditor>>update: (in category 'updating') -----
- update: aSymbol
- "Receive a change notice from an object of whom the receiver
- is a dependent."
- super update: aSymbol.
- ""
- aSymbol == #untranslated
- ifTrue: [self refreshUntranslated].
- aSymbol == #translations
- ifTrue: [self refreshTranslations]!
Item was removed:
- ----- Method: GetTextExporter2>>formatString: (in category 'private') -----
- formatString: aString
- | result |
- result := aString.
- self formatReplacements
- do: [:each | result := result copyReplaceAll: each key with: each value].
- ^ result!
Item was removed:
- ----- Method: GetTextExporter2>>dirNameCategory:translator: (in category 'exporting') -----
- dirNameCategory: category translator: translator
- "Answer a file name for the category. Make one if it is not exist yet.
- Make template file name if translator is nil"
- "self new dirNameCategory: 'Morphic-Scripting Support' translator:
- NaturalLanguageTranslator current"
- "self new dirNameCategory: 'Morphic-Scripting Support' translator: nil"
- | safeCategory fileName dirName pathName |
- safeCategory := category copyReplaceAll: ' ' with: '_'.
- fileName := translator
- ifNil: [safeCategory , '.pot']
- ifNotNil: [translator localeID posixName , '.po'].
- dirName := (safeCategory findTokens: '-')
- inject: 'po'
- into: [:aString :next | aString , FileDirectory slash , next].
- pathName := dirName , FileDirectory slash , fileName.
- (FileDirectory default directoryNamed: dirName) assureExistence.
- ^ pathName!
Item was removed:
- ----- Method: GetTextExporter2>>getTextDomainForPackage: (in category 'as yet unclassified') -----
- getTextDomainForPackage: aPackageInfo
- ^TextDomainManager domainForPackage: aPackageInfo!
Item was removed:
- ----- Method: LanguageEditor>>deselectAllTranslation (in category 'gui methods') -----
- deselectAllTranslation
- selectedTranslations := IdentitySet new.
- self changed: #allSelections!
Item was removed:
- SystemWindow subclass: #LanguageEditor
- instanceVariableNames: 'translator translations untranslated selectedTranslation selectedTranslations selectedUntranslated translationsList untranslatedList translationText translationsFilter untranslatedFilter newerKeys'
- classVariableNames: 'CheckMethods'
- poolDictionaries: ''
- category: 'Multilingual-Editor'!
-
- !LanguageEditor commentStamp: 'dgd 11/16/2003 15:02' prior: 0!
- Editor for Babel's languages.
-
- Open it from
-
- World Menu >> open... >> Language Editor (to open on default language)
- World Menu >> open... >> Language Editor for... (to choose the language)
-
- Or click:
-
- LanguageEditor openOnDefault.
- LanguageEditor open.
-
- See http://swiki.agro.uba.ar/small_land/191 for documentation
- !
Item was removed:
- ----- Method: LanguageEditor>>getTextImportAll (in category 'gui methods') -----
- getTextImportAll
- self
- withUnboundModelDo: [:trans | Cursor wait
- showWhile: [GetTextImporter import: trans allDirectory: FileDirectory default]].
- self refreshBoth!
Item was removed:
- ----- Method: LanguageEditor>>selectedUntranslated: (in category 'accessing') -----
- selectedUntranslated: anInteger
- "change the selectedUntranslated"
- selectedUntranslated := anInteger.
- ""
- self changed: #selectedUntranslated!
Item was removed:
- ----- Method: GetTextExporter>>export: (in category 'exporting') -----
- export: aLanguage
- language := aLanguage.
- [stream := FileStream forceNewFileNamed: self defaultFileName.
- stream lineEndConvention: #lf.
- stream converter: UTF8TextConverter new.
- self exportHeader.
- self exportTranslations.
- self exportUntranslated]
- ensure: [stream close]!
Item was removed:
- ----- Method: GetTextImporter>>appendStr: (in category 'parsing') -----
- appendStr: aString
- msgStr := msgStr , aString!
Item was removed:
- ----- Method: LanguageEditor>>report (in category 'gui methods') -----
- report
- self reportString openInWorkspaceWithTitle: 'report' translated!
Item was removed:
- ----- Method: LanguageEditor>>untranslatedFilter (in category 'accessing') -----
- untranslatedFilter
- ^ untranslatedFilter
- ifNil: ['']!
Item was removed:
- ----- Method: GetTextImporter>>initialize (in category 'initialize-release') -----
- initialize
- msgId := ''.
- msgStr := ''.
- state := nil!
Item was removed:
- ----- Method: GetTextExporter2>>currentDateAndTime (in category 'private') -----
- currentDateAndTime
- ^ String
- streamContents: [:aStream |
- aStream nextPutAll: Date today yyyymmdd;
- space.
- Time now
- print24: true
- showSeconds: false
- on: aStream.
- aStream nextPutAll: '-0000']!
Item was removed:
- ----- Method: LanguageEditor>>getTextExport (in category 'gui methods') -----
- getTextExport
- Cursor wait
- showWhile: [GetTextExporter2 new exportTranslator: self model]!
Item was removed:
- ----- Method: GetTextImporter>>importID:fileNamed: (in category 'importing') -----
- importID: localeID fileNamed: fileName
- | currentPlatform |
- language := InternalTranslator newLocaleID: localeID.
- currentPlatform := Locale currentPlatform.
- [Locale
- currentPlatform: (Locale localeID: localeID).
- [stream := FileStream readOnlyFileNamed: fileName.
- stream text.
- self parse]
- ensure: [stream notNil
- ifTrue: [stream close]]]
- ensure: [Locale currentPlatform: currentPlatform].
- NaturalLanguageTranslator privateStartUp "Actually it is not private no more...".!
Item was removed:
- ----- Method: LanguageEditor>>selectUntranslatedPhrase: (in category 'gui methods') -----
- selectUntranslatedPhrase: phraseString
- self
- selectedUntranslated: (self untranslated indexOf: phraseString)!
Item was removed:
- ----- Method: TranslatedReceiverFinder>>arraySearch:fromArray:addTo: (in category 'private') -----
- arraySearch: aSymbol fromArray: anArray addTo: aCollection
- "Find literals ahead of aSymbol from arrays in the method."
- "BUG: it can handle just one occurrence"
- "self new arraySearch: #hello fromArray: #(ignore (ignore detected
- hello ignore)) addTo: Set new"
- | index |
- (index := anArray identityIndexOf: aSymbol) > 1
- ifTrue: [aCollection add: (anArray at: index - 1) asString].
- (anArray
- select: [:each | each isMemberOf: Array])
- do: [:each | self
- arraySearch: aSymbol
- fromArray: each
- addTo: aCollection].
- ^ aCollection!
Item was removed:
- ----- Method: LanguageEditor>>createUntranslatedToolbar (in category 'initialization - toolbar') -----
- createUntranslatedToolbar
- "create a toolbar for the receiver"
- | toolbar |
- toolbar := self createRow.
- ""
- toolbar
- addMorphBack: (self
- createUpdatingButtonWording: #untranslatedFilterWording
- action: #filterUntranslated
- help: 'Filter the untranslated list.').
- toolbar addTransparentSpacerOfSize: 5 @ 0.
- ""
- toolbar
- addMorphBack: (self
- createButtonLabel: 'search'
- action: #searchUntranslated
- help: 'Search for a untranslated phrase containing...').
- toolbar addTransparentSpacerOfSize: 5 @ 0.
- toolbar
- addMorphBack: (self
- createButtonLabel: 'remove'
- action: #removeUntranslated
- help: 'Remove the selected untranslated phrease. If none is selected, ask for the one to remove.').
- ""
- toolbar addTransparentSpacerOfSize: 5 @ 0.
- toolbar
- addMorphBack: (self
- createButtonLabel: 'translate'
- action: #translate
- help: 'Translate the selected untranslated phrase or a new phrase').
- ""
- toolbar addTransparentSpacerOfSize: 5 @ 0.
- toolbar
- addMorphBack: (self
- createButtonLabel: 'where'
- action: #browseMethodsWithUntranslated
- help: 'Launch a browser on all methods that contain the phrase as a substring of any literal String.').
- toolbar addTransparentSpacerOfSize: 5 @ 0.
- toolbar
- addMorphBack: (self
- createButtonLabel: 'r-unused'
- action: #removeUntranslatedButUnusedStrings
- help: 'Remove all the strings that are not used by the system').
- ^ toolbar!
Item was removed:
- ----- Method: LanguageEditor>>createButtonLabel:action:help: (in category 'initialization - toolbar') -----
- createButtonLabel: aString action: actionSelector help: helpString
- "create a toolbar for the receiver"
- | button |
- button := SimpleButtonMorph new target: self;
- label: aString translated "font: Preferences standardButtonFont";
- actionSelector: actionSelector;
- setBalloonText: helpString translated;
- color: translator defaultBackgroundColor twiceDarker;
- borderWidth: 2;
- borderColor: #raised.
- ""
- ^ button!
Item was removed:
- ----- Method: LanguageEditor>>getTextImport (in category 'gui methods') -----
- getTextImport
- | menu |
- menu := MenuMorph new defaultTarget: self.
- menu addTitle: 'Choose translation file' translated.
- menu add: 'All *.po files' translated action: #getTextImportAll.
- menu add: 'Choose a file' translated action: #getTextImportAFile.
- menu popUpInWorld!
Item was removed:
- ----- Method: GetTextExporter2>>appendTranslations: (in category 'exporting') -----
- appendTranslations: domains
- self appendStringReceivers: #translated into: domains.
- self appendStringReceivers: #translatedNoop into: domains.
- self appendVocabularies: domains.
- !
Item was removed:
- ----- Method: LanguageEditor>>translate (in category 'gui methods') -----
- translate
- "translate a phrase"
- | phrase |
- phrase := self phraseToTranslate.
- ""
- (phrase isNil
- or: [phrase = ''])
- ifTrue: [""
- self beep.
- ^ self].
- ""
- self translatePhrase: phrase.
- self refreshBoth!
Item was removed:
- ----- Method: LanguageEditor>>translationsFilter (in category 'accessing') -----
- translationsFilter
- ^translationsFilter ifNil:['']!
Item was removed:
- ----- Method: GetTextExporter2 classSide>>exportAll (in category 'utilities') -----
- exportAll
- "GetTextExporter2 exportAll"
- self new exportTemplate.
- InternalTranslator availableLanguageLocaleIDs
- do: [:each | self new exportTranslator: each translator]!
Item was removed:
- ----- Method: TranslatedReceiverFinder class>>browseNonLiteralReceivers (in category 'utilities') -----
- browseNonLiteralReceivers
- "TranslatedReceiverFinder browseNonLiteralReceivers"
- SystemNavigation default
- browseMessageList: self new nonLiteralReceivers asSortedCollection
- name: 'Non literal receivers of #translated'
- autoSelect: 'translated'!
Item was removed:
- ----- Method: LanguageEditor>>initializeToolbars (in category 'initialization - toolbar') -----
- initializeToolbars
- "initialize the receiver's toolbar"
- self
- addMorph: self createMainToolbar
- frame: (0 @ 0 corner: 1 @ 0.09).
- ""
- self
- addMorph: self createTranslationsToolbar
- frame: (0 @ 0.09 corner: 0.5 @ 0.18).
- self
- addMorph: self createUntranslatedToolbar
- frame: (0.5 @ 0.09 corner: 1 @ 0.18)!
Item was removed:
- ----- Method: LanguageEditor>>browseMethodsWithUntranslated (in category 'gui methods') -----
- browseMethodsWithUntranslated
- | untrans |
- self selectedUntranslated isZero
- ifTrue: [""
- self beep.
- self inform: 'select the untrans phrase to look for' translated.
- ^ self].
- ""
- untrans := self untranslated at: self selectedUntranslated.
- SystemNavigation default browseMethodsWithLiteral: untrans.
- !
Item was removed:
- ----- Method: LanguageEditor class>>openOn: (in category 'instance creation') -----
- openOn: aLanguage
- "open an instance on aLanguage"
- World submorphs
- do: [:each | ""
- ((each isKindOf: LanguageEditor)
- and: [each translator == aLanguage])
- ifTrue: [""
- self ensureVisibilityOfWindow: each.
- ^ self]].
- ""
- ^ (self on: aLanguage) openInWorld!
Item was removed:
- ----- Method: GetTextImporter>>parseMsg: (in category 'parsing') -----
- parseMsg: lineString
- | begin end msg |
- begin := lineString indexOf: $".
- end := lineString lastIndexOf: $".
- msg := begin + 1 <= (end - 1)
- ifTrue: [lineString copyFrom: begin + 1 to: end - 1]
- ifFalse: [''].
- state
- ifNotNil: [self perform: state with: msg].
- ^ msg!
Item was removed:
- ----- Method: GetTextImporter>>import: (in category 'importing') -----
- import: aLanguage
- ^ self import: aLanguage fileNamed: aLanguage localeID posixName , '.po'!
Item was removed:
- Object subclass: #GetTextExporter2
- instanceVariableNames: 'stream'
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Multilingual-Editor'!
-
- !GetTextExporter2 commentStamp: '<historical>' prior: 0!
- Export translations to gettext format divided into categories.
-
- "Export gettext template files"
- GetTextExporter2 new exportTemplate.
-
- "Export translation files for current locale"
- GetTextExporter2 new exportTranslator: (InternalTranslator newLocaleID: LocaleID current).
-
- "Export all gettext template and po files."
- GetTextExporter2 exportAll.
-
- "To register a class category as a new domain"
- TextDomainManager registerClassCategory: 'Morphic-Books' domain: 'Book'.
- "Remove a class category"
- TextDomainManager unregisterClassCategory: 'Morphic-Books'.!
Item was removed:
- ----- Method: LanguageEditor>>delete (in category 'open/close') -----
- delete
- "Remove the receiver as a submorph of its owner"
- self model: nil.
- super delete !
Item was removed:
- ----- Method: LanguageEditor>>saveToFile (in category 'gui methods') -----
- saveToFile
- "save the translator to a file"
- | fileName |
- fileName := FillInTheBlank request: 'file name' translated initialAnswer: translator localeID isoString , '.translation'.
- (fileName isNil
- or: [fileName isEmpty])
- ifTrue: [""
- self beep.
- ^ self].
- ""
- Cursor wait
- showWhile: [
- self translator saveToFileNamed: fileName]!
Item was removed:
- ----- Method: GetTextImporter classSide>>importAll (in category 'utilities') -----
- importAll
- "GetTextImporter importAll"
- "Import all gettext files on po/. Only registered language is imported"
- InternalTranslator cachedTranslations
- do: [:translator | self import: translator allDirectory: FileDirectory default]!
Item was removed:
- ----- Method: TranslatedReceiverFinder>>search:messageNode:addTo: (in category 'private') -----
- search: aSymbol messageNode: aParseNode addTo: aCollection
- "self new search: #translated messageNode: (Project decompile: #updateLocaleDependentsWithPreviousSupplies:gently:) addTo: OrderedCollection new"
-
- ((aParseNode isMemberOf: MessageNode)
- and: [(aParseNode selector isMemberOf: SelectorNode)
- and: [aParseNode selector key = aSymbol]])
- ifTrue: [aCollection add: aParseNode].
- (aParseNode notNil
- and: [aParseNode isLeaf not])
- ifTrue: [aParseNode getAllChildren
- do: [:child | self
- search: aSymbol
- messageNode: child
- addTo: aCollection]].
- ^ aCollection!
Item was removed:
- ----- Method: GetTextImporter classSide>>import:allDirectory: (in category 'utilities') -----
- import: translator allDirectory: aFileDirectory
- "self import: NaturalLanguageTranslator current allDirectory:
- FileDirectory default"
- | fileName targetFile |
- fileName := translator localeID posixName , '.po'.
- (FileDirectory default directoryNamed: 'po')
- withAllSubdirectoriesCollect: [:each | (each fileExists: fileName)
- ifTrue: [targetFile := each fullNameFor: fileName.
- self new import: translator fileNamed: targetFile]]!
Item was removed:
- ----- Method: LanguageEditor>>refreshBoth (in category 'updating') -----
- refreshBoth
- self refreshUntranslated
- !
Item was removed:
- ----- Method: GetTextInterchange>>defaultFileName (in category 'private') -----
- defaultFileName
- ^ language localeID posixName , '.po'!
Item was removed:
- ----- Method: LanguageEditor>>selectedTranslationsAt: (in category 'accessing') -----
- selectedTranslationsAt: index
- ^ selectedTranslations includes: index!
Item was removed:
- ----- Method: LanguageEditor>>getTextImportAFile (in category 'gui methods') -----
- getTextImportAFile
- | result |
- result := (StandardFileMenu new pattern: '*.po';
-
- oldFileFrom: (FileDirectory default directoryNamed: 'po')) startUpWithCaption: 'Select a File:' translated.
- result
- ifNil: [^ self].
- self
- withUnboundModelDo: [:trans | Cursor wait
- showWhile: [GetTextImporter new
- import: trans
- fileNamed: (result directory fullNameFor: result name)]]!
Item was removed:
- ----- Method: LanguageEditor class>>checkMethods (in category 'private') -----
- checkMethods
- ^CheckMethods ifNil: [CheckMethods := self initCheckMethods]!
Item was removed:
- ----- Method: LanguageEditor>>phrase:translation: (in category 'gui methods') -----
- phrase: phraseString translation: translationString
- "set the models's translation for phraseString"
- self translator phrase: phraseString translation: translationString.
- self refreshBoth.
-
- newerKeys add: phraseString.
- !
Item was removed:
- ----- Method: LanguageEditor>>check (in category 'private') -----
- check
- "check the translations and answer a collection with the results"
- | results counter phrasesCount checkMethod |
- results := OrderedCollection new.
- untranslated := self untranslated.
- phrasesCount := self translations size + self untranslated size.
- counter := 0.
- checkMethod := self class checkMethods at: self translator localeID printString ifAbsent: [^results].
-
- self translations
- keysAndValuesDo: [:phrase :translation |
- | result |
- result := self perform: checkMethod with: phrase with: translation.
- (result notNil
- and: [result notEmpty])
- ifTrue: [results add: {phrase. translation. result}].
-
- counter := counter + 1.
- (counter isDivisibleBy: 50)
- ifTrue: [| percent |
- percent := counter / phrasesCount * 100 roundTo: 0.01.
- Transcript
- show: ('- checked {1} phrases of {2} ({3}%)...' translated format: {counter. phrasesCount. percent});
- cr]].
-
- self untranslated
- do: [:phrase |
- | result |
- result := self checkUntranslatedPhrase: phrase.
- (result notNil
- and: [result notEmpty])
- ifTrue: [results add: {phrase. nil. result}].
-
- counter := counter + 1.
- (counter isDivisibleBy: 50)
- ifTrue: [| percent |
- percent := counter / phrasesCount * 100 roundTo: 0.01.
- Transcript
- show: ('- checked {1} phrases of {2} ({3}%)...' translated format: {counter. phrasesCount. percent});
- cr]].
-
- ^ results!
Item was removed:
- ----- Method: LanguageEditor>>translatePhrase: (in category 'gui methods') -----
- translatePhrase: aString
- "translate aString"
- | translation |
- translation := FillInTheBlank
- multiLineRequest: 'translation for: ' translated , '''' , aString , ''''
- centerAt: Sensor cursorPoint
- initialAnswer: aString
- answerHeight: 200.
- ""
- (translation isNil
- or: [translation = ''])
- ifTrue: [""
- self beep.
- ^ self].
- ""
- self phrase: aString translation: translation!
Item was removed:
- ----- Method: LanguageEditor>>loadFromFile (in category 'gui methods') -----
- loadFromFile
- | fileName |
- fileName := self selectTranslationFileName.
- fileName isNil
- ifTrue: [""
- self beep.
- ^ self].
- ""
- Cursor wait
- showWhile: [
- self translator loadFromFileNamed: fileName.
- self refreshBoth]!
Item was removed:
- ----- Method: GetTextExporter2>>createExtraInformation (in category 'private') -----
- createExtraInformation
- | extras |
- extras := OrderedCollection new.
- #(
- 'Language name as you''d like it to appear in the Languages menu' 'Language-Name'
- 'Scale to apply to font size (2 for twice as large)' 'Font-Scale'
- 'Directionality of language' 'Language-Direction'
- 'Use this if you do not want any of the text to be bolded, for legibility' 'Suppress-Bold'
- 'Font to use on a Windows system' 'Win-Font'
- 'Font to use on a Mac system' 'Mac-Font'
- 'Font to use on a Linux system' 'Linux-Font') pairsDo: [:first :second |
- extras add: (Array with: '' with: first with: second).
- ].
- ^ extras!
Item was removed:
- ----- Method: LanguageEditor>>initializeOn: (in category 'initialization') -----
- initializeOn: aLanguage
- "initialize the receiver on aLanguage"
- ""
- selectedTranslation := 0.
- selectedUntranslated := 0.
- selectedTranslations := IdentitySet new.
- ""
- translator := aLanguage.
- ""
- self model: aLanguage.
- self setLabel: 'Language editor for: ' translated , self translator name.
- ""
- self initializeToolbars.
- self initializePanels.
- self initializeStatusbar.
- self initializeNewerKeys.
- !
Item was removed:
- ----- Method: LanguageEditor>>filterUntranslated: (in category 'gui methods') -----
- filterUntranslated: aString
- | filter |
- filter := aString
- ifNil: [''].
- ""
- untranslatedFilter := filter.
- self refreshUntranslated!
Item was removed:
- ----- Method: LanguageEditor>>removeUntranslated (in category 'gui methods') -----
- removeUntranslated
- "remove the selected untranslated phrase"
- | untrans |
- self selectedUntranslated isZero
- ifTrue: [""
- self beep.
- self inform: 'select the untranslated phrase to remove' translated.
- ^ self].
- ""
- untrans := self untranslated at: self selectedUntranslated.
- ""
- (self
- confirm: ('Removing "{1}".
- Are you sure you want to do this?' translated format: {untrans}))
- ifFalse: [^ self].
- ""
- self translator removeUntranslated: untrans!
Item was removed:
- ----- Method: GetTextExporter2>>appendStringReceivers:into: (in category 'private') -----
- appendStringReceivers: aSymbol into: domains
- | literals references domainName methodReference keywords found |
-
- found := TranslatedReceiverFinder new stringReceiversWithContext: aSymbol.
- found do: [ :assoc |
- methodReference := assoc key.
- keywords := assoc value.
- domainName _ self getTextDomainForPackage:
- (PackageOrganizer default packageOfMethod: methodReference).
- literals _ domains at: domainName ifAbsentPut: [Dictionary new].
- keywords do: [ :literal |
- references _ literals at: literal ifAbsentPut: [OrderedCollection new].
- references add: methodReference.
- ].
- ].
- !
Item was removed:
- GetTextInterchange subclass: #GetTextExporter
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Multilingual-Editor'!
-
- !GetTextExporter commentStamp: 'tak 7/23/2007 00:31' prior: 0!
- Export translations to one .po file.
-
- GetTextExporter new export: NaturalLanguageTranslator current
- !
Item was removed:
- ----- Method: GetTextExporter2>>dirNameDomain:translator: (in category 'exporting') -----
- dirNameDomain: domain translator: translator
- "Answer a file name for the domain. Make one if it is not exist yet.
- Make template file name if translator is nil"
- "self new dirNameDomain: 'etoys' translator:
- NaturalLanguageTranslator current"
- "self new dirNameDomain: 'etoys' translator: nil"
- | fileName dirName pathName |
- "safeCategory := category copyReplaceAll: ' ' with: '_'."
- fileName := translator
- ifNil: [domain , '.pot']
- ifNotNil: [translator localeID posixName , '.po'].
- dirName := 'po', FileDirectory slash, domain.
- pathName := dirName , FileDirectory slash , fileName.
- (FileDirectory default directoryNamed: dirName) assureExistence.
- ^ pathName!
Item was removed:
- ----- Method: LanguageEditor>>selectTranslationFileName (in category 'gui methods') -----
- selectTranslationFileName
- "answer a file with a translation"
- | file |
- file := (StandardFileMenu oldFileMenu: FileDirectory default withPattern: '*.translation')
- startUpWithCaption: 'Select the file...' translated.
- ^ file isNil
- ifFalse: [file directory fullNameFor: file name]!
Item was removed:
- ----- Method: LanguageEditor>>selectNewerKeys (in category 'gui methods') -----
- selectNewerKeys
-
- | index |
- self deselectAllTranslation.
- newerKeys do: [:k |
- index _ self translations indexOf: k ifAbsent: [0].
- index > 0 ifTrue: [
- self selectedTranslationsAt: index put: true
- ].
- ].
- !
Item was removed:
- ----- Method: LanguageEditor>>checkUntranslatedPhrase: (in category 'private') -----
- checkUntranslatedPhrase: phraseString
- "check the phrase an aswer a string with a comment or a nil
- meaning no-comments"
-
- (self translations includes: phraseString)
- ifTrue: [^ 'possible double-translation' translated].
-
- ^ nil!
Item was removed:
- ----- Method: GetTextExporter2>>stream: (in category 'accessing') -----
- stream: aStream
- stream := aStream!
Item was removed:
- ----- Method: LanguageEditor>>phraseToTranslate (in category 'gui methods') -----
- phraseToTranslate
- "answer a phrase to translate. use the selected untranslated phrase or ask for a new one"
- ^ self selectedUntranslated isZero
- ifTrue: [FillInTheBlank
- multiLineRequest: 'new phrase to translate' translated
- centerAt: Sensor cursorPoint
- initialAnswer: ''
- answerHeight: 200]
- ifFalse: [self untranslated at: self selectedUntranslated]!
Item was removed:
- ----- Method: LanguageEditor>>applyTranslations (in category 'gui methods') -----
- applyTranslations
- "private - try to apply the translations as much as possible all
- over the image"
- Project current updateLocaleDependents!
Item was removed:
- ----- Method: GetTextExporter2>>exportHeader: (in category 'private') -----
- exportHeader: domainName
- | headers |
- self exportTag: 'msgid' msg: ''.
- self exportTag: 'msgstr' msg: ''.
- headers := self createHeaders.
- headers add: 'X-Etoys-Domain' -> domainName.
- headers do: [:each | self exportHeaderLineKey: each key value: each value].
- stream cr; cr!
Item was removed:
- ----- Method: TranslatedReceiverFinder>>stringReceivers (in category 'accessing') -----
- stringReceivers
- "TranslatedReceiverFinder new stringReceivers"
- | stringReceivers messages |
- messages := Set new.
- (SystemNavigation default allCallsOn: #translated)
- do: [:message | self search: #translated messageNode: message decompile addTo: messages].
- stringReceivers := messages
- select: [:each | each receiver isMemberOf: LiteralNode]
- thenCollect: [:each | each receiver key].
- ^ stringReceivers asArray sort!
Item was removed:
- ----- Method: GetTextImporter>>import:fileNamed: (in category 'importing') -----
- import: aLanguage fileNamed: fileName
- self importID: aLanguage localeID fileNamed: fileName!
Item was removed:
- ----- Method: LanguageEditor>>browseMethodsWithTranslation (in category 'gui methods') -----
- browseMethodsWithTranslation
- | translation |
- self selectedTranslation isZero
- ifTrue: [""
- self beep.
- self inform: 'select the translation to look for' translated.
- ^ self].
- ""
- translation := self translations at: self selectedTranslation.
- self systemNavigation browseMethodsWithLiteral: translation!
Item was removed:
- ----- Method: LanguageEditor>>createUpdatingButtonWording:action:help: (in category 'initialization - toolbar') -----
- createUpdatingButtonWording: wordingSelector action: actionSelector help: helpString
- "create a toolbar for the receiver"
- | button |
- button := (UpdatingSimpleButtonMorph newWithLabel: '-') target: self;
- wordingSelector: wordingSelector;
- actionSelector: actionSelector;
- setBalloonText: helpString translated;
- color: translator defaultBackgroundColor twiceDarker;
- borderWidth: 1;
- borderColor: #raised; cornerStyle: #square.
- ""
- ^ button!
Item was removed:
- ----- Method: GetTextExporter2>>exportTag:singleLine: (in category 'private') -----
- exportTag: tag singleLine: aString
- stream nextPutAll: tag.
- stream space.
- stream nextPut: $".
- stream
- nextPutAll: (self formatString: aString).
- stream nextPut: $".
- stream cr!
Item was removed:
- ----- Method: GetTextExporter2>>exportTag:msg: (in category 'private') -----
- exportTag: tag msg: aString
- | pos end line |
- (aString indexOf: Character cr)
- = 0
- ifTrue: [self exportTag: tag singleLine: aString]
- ifFalse: [self exportTag: tag singleLine: ''.
- pos := 1.
- end := 0.
- [end < aString size]
- whileTrue: [end := aString indexOf: Character cr startingAt: pos.
- end = 0
- ifTrue: [end := aString size].
- line := aString copyFrom: pos to: end.
- stream nextPut: $";
-
- nextPutAll: (self formatString: line);
- nextPut: $";
- cr.
- pos := end + 1]]!
Item was removed:
- ----- Method: LanguageEditor>>asHtml: (in category 'reporting') -----
- asHtml: aString
- | stream |
- stream := String new writeStream.
-
- aString
- do: [:each |
- each caseOf: {
- [Character cr] -> [stream nextPutAll: '<br>'].
- [$&] -> [stream nextPutAll: '&'].
- [$<] -> [stream nextPutAll: '<'].
- [$>] -> [stream nextPutAll: '>'].
- [$*] -> [stream nextPutAll: '☆'].
- [$@] -> [stream nextPutAll: '&at;']}
- otherwise: [stream nextPut: each]].
-
- ^ stream contents!
Item was removed:
- ----- Method: LanguageEditor>>mergeFromFile (in category 'gui methods') -----
- mergeFromFile
- | fileName |
- fileName := self selectTranslationFileName.
- fileName isNil
- ifTrue: [""
- self beep.
- ^ self].
- ""
- Cursor wait
- showWhile: [
- self translator loadFromFileNamed: fileName.
- self refreshBoth]!
Item was removed:
- ----- Method: GetTextImporter>>formatString: (in category 'private') -----
- formatString: aString
- "
- self assert: (GetTextImporter new formatString: 'test') = 'test'.
- self assert: (GetTextImporter new formatString: 'te\nst') = ('te', String cr, 'st').
- self assert: (GetTextImporter new formatString: 'te\\nst') = ('te\nst').
- self assert: (GetTextImporter new formatString: 'te\\st') = ('te\st').
- self assert: (GetTextImporter new formatString: 'te\st') = ('te\st').
- "
- | reader writer char |
- reader := aString readStream.
- writer := '' writeStream.
- [reader atEnd]
- whileFalse: [char := reader next.
- (char = $\
- and: [reader atEnd not])
- ifTrue: [char := reader next.
- char caseOf: {
- [$n] -> [writer nextPut: Character cr].
- [$t] -> [writer nextPut: Character tab].
- [$"] -> [writer nextPut: $"].
- [$\] -> [writer nextPut: $\]}
- otherwise: [writer nextPutAll: {$\. char}]]
- ifFalse: [writer nextPut: char]].
- ^ writer contents!
Item was removed:
- ----- Method: GetTextImporter>>parse (in category 'parsing') -----
- parse
- | size |
- size := (stream isKindOf: FileStream)
- ifTrue: [stream size]
- ifFalse: [1].
- ProgressInitiationException
- display: 'Importing phrases from a gettext file.'
- during: [:bar | [stream atEnd]
- whileFalse: [| line |
- line := stream upTo: Character linefeed.
- self
- parseLine: ((line endsWith: String cr)
- ifTrue: [line allButLast]
- ifFalse: [line]).
- bar value: stream position / size]].
- self storeTranslation!
Item was removed:
- Object subclass: #TranslatedReceiverFinder
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Multilingual-Editor'!
Item was removed:
- ----- Method: LanguageEditor class>>openOnDefault (in category 'opening') -----
- openOnDefault
- "open the receiver on the default language"
- self openOn: LocaleID current!
Item was removed:
- ----- Method: LanguageEditor>>filterUntranslated (in category 'gui methods') -----
- filterUntranslated
- | filter |
- filter := FillInTheBlank request: 'filter with
- (empty string means no-filtering)' translated initialAnswer: self untranslatedFilter.
- ""
- self filterUntranslated: filter!
Item was removed:
- ----- Method: TranslatedReceiverFinder>>findWordsWith:in: (in category 'accessing') -----
- findWordsWith: aSymbol in: aMethodReference
- "Find words for translation with the symbol in a method. See
- LanguageEditorTest >>testFindTranslatedWords"
- "| message |
- message := MethodReference new setStandardClass: Morph class
- methodSymbol: #supplementaryPartsDescriptions.
- self new findWordsWIth: #translatedNoop in: message"
- | messages keywords aParseNode |
- aParseNode := aMethodReference decompile.
- "Find from string literal"
- messages := Set new.
- self
- search: aSymbol
- messageNode: aParseNode
- addTo: messages.
- keywords := OrderedCollection new.
- messages
- select: [:aMessageNode | aMessageNode receiver isMemberOf: LiteralNode]
- thenDo: [:aMessageNode | aMessageNode receiver key
- literalStringsDo: [:literal | keywords add: literal]].
- "Find from array literal"
- self
- arraySearch: aSymbol
- messageNode: aParseNode
- addTo: keywords.
- ^ keywords!
Item was removed:
- ----- Method: LanguageEditor>>checkPhrase:translation: (in category 'private') -----
- checkPhrase: phraseString translation: translationString
- ^nil!
Item was removed:
- ----- Method: LanguageEditor>>getText (in category 'gui methods') -----
- getText
- | menu |
- menu := MenuMorph new defaultTarget: self.
- ""
- menu
- add: 'gettext template' translated
- target: self
- selector: #getTextExportTemplate.
- menu lastItem setBalloonText: 'exports the translations to gettext separated format.' translated.
- menu
- add: 'gettext export' translated
- target: self
- selector: #getTextExport.
- menu lastItem setBalloonText: 'Exports the translations to GetText format.' translated.
-
- ""
- menu
- add: 'gettext import' translated
- target: self
- selector: #getTextImport.
- menu lastItem setBalloonText: 'Imports the translations from GetText format.' translated.
- ""
- menu popUpInWorld!
Item was removed:
- ----- Method: GetTextInterchange>>stream: (in category 'accessing') -----
- stream: aStream
- stream _ aStream!
Item was removed:
- ----- Method: LanguageEditor>>searchUntranslated: (in category 'gui methods') -----
- searchUntranslated: aString
- | untranslateds results index |
- untranslateds := self untranslated.
- results := untranslateds
- select: [:each | '*' , aString , '*' match: each].
- ""
- results isEmpty
- ifTrue: [""
- self inform: 'no matches for' translated , ' ''' , aString , ''''.
- ^ self].
- ""
- results size = 1
- ifTrue: [""
- self selectUntranslatedPhrase: results first.
- ^ self].
- ""
- index := (PopUpMenu
- labelArray: (results
- collect: [:each | each copy replaceAll: Character cr with: $\]))
- startUpWithCaption: 'select the untranslated phrase...' translated.
- ""
- index isZero
- ifTrue: [""
- self beep.
- ^ self].
- ""
- self
- selectUntranslatedPhrase: (results at: index)!
Item was removed:
- ----- Method: LanguageEditor>>identifyUnusedStrings (in category 'stef') -----
- identifyUnusedStrings
- "self new identifyUnusedStrings"
- translationsList getList
- do: [:each |
- Transcript show: each.
- Transcript show: (Smalltalk
- allSelect: [:method | method
- hasLiteralSuchThat: [:lit | lit isString
- and: [lit includesSubstring: each caseSensitive: true]]]) size printString; cr]!
Item was removed:
- ----- Method: GetTextImporter>>parseLine: (in category 'parsing') -----
- parseLine: lineString
- (lineString beginsWith: '"Content-Type:')
- ifTrue: [self setContentType: lineString.
- ^ self].
- (lineString beginsWith: '#')
- ifTrue: ["do nothing"
- ^ self].
- lineString = ''
- ifTrue: [^ self storeTranslation].
- (lineString beginsWith: 'msgid')
- ifTrue: [state := #appendId:.
- self parseMsg: lineString.
- ^ self].
- (lineString beginsWith: 'msgstr')
- ifTrue: [state := #appendStr:.
- self parseMsg: lineString.
- ^ self].
- self parseMsg: lineString!
Item was removed:
- ----- Method: LanguageEditor>>untranslatedKeystroke: (in category 'gui methods') -----
- untranslatedKeystroke: aChar
- "Respond to a Command key in the translations list."
- aChar == $t
- ifTrue: [^ self translate].
- aChar == $E
- ifTrue: [^ self browseMethodsWithUntranslated]!
Item was removed:
- ----- Method: GetTextInterchange>>stream (in category 'accessing') -----
- stream
- ^ stream!
Item was removed:
- ----- Method: GetTextExporter2 classSide>>coverageStatus (in category 'utilities') -----
- coverageStatus
- "self coverageStatus"
- | keys diff |
- keys := self keys.
- diff := InternalTranslator allKnownPhrases keys difference: keys.
- Transcript cr; show: 'Detected keywords by GetTextExporter2: ' , keys size printString.
- Transcript cr; show: 'All known phrases in InternalTranslator: ' , InternalTranslator allKnownPhrases size printString.
- Transcript cr; show: 'Coverage: ' , (keys size / InternalTranslator allKnownPhrases size * 100.0) printString , '%'.
- diff inspect!
Item was removed:
- ----- Method: LanguageEditor>>selectedTranslation: (in category 'accessing') -----
- selectedTranslation: anInteger
- "change the receiver's selectedTranslation"
- selectedTranslation := anInteger.
- ""
- self changed: #selectedTranslation.
- self changed: #translation!
Item was removed:
- ----- Method: GetTextExporter2>>exportHeaderLineKey:value: (in category 'private') -----
- exportHeaderLineKey: keyString value: valueString
- stream nextPut: $";
- nextPutAll: keyString;
- nextPut: $:;
- space;
- nextPutAll: valueString;
- nextPutAll: '\n';
- nextPut: $";
- cr.!
Item was removed:
- ----- Method: GetTextExporter2 classSide>>exportTemplate (in category 'utilities') -----
- exportTemplate
- "GetTextExporter2 exportTemplate"
- self new exportTemplate.!
Item was removed:
- ----- Method: LanguageEditor>>perform:orSendTo: (in category 'message handling') -----
- perform: selector orSendTo: otherTarget
- "I wish to intercept and handle selector myself"
- ^ self perform: selector!
Item was removed:
- ----- Method: LanguageEditor>>searchTranslation: (in category 'gui methods') -----
- searchTranslation: aString
- | results index |
- results := self translations
- select: [:each | ""
- ('*' , aString , '*' match: each)
- or: ['*' , aString , '*' match: (self translator translate: each)]].
- ""
- results isEmpty
- ifTrue: [""
- self inform: 'no matches for' translated , ' ''' , aString , ''''.
- ^ self].
- ""
- results size = 1
- ifTrue: [""
- self selectTranslationPhrase: results first.
- ^ self].
- ""
- index := (PopUpMenu
- labelArray: (results
- collect: [:each | ""
- (each copy replaceAll: Character cr with: $\)
- , ' -> '
- , ((self translator translate: each) copy replaceAll: Character cr with: $\)]))
- startUpWithCaption: 'select the translation...' translated.
- ""
- index isZero
- ifTrue: [""
- self beep.
- ^ self].
- ""
- self
- selectTranslationPhrase: (results at: index)!
Item was removed:
- ----- Method: LanguageEditor>>createMainToolbar (in category 'initialization - toolbar') -----
- createMainToolbar
- "create a toolbar for the receiver"
- | toolbar |
- toolbar := self createRow.
- ""
- " toolbar
- addMorphBack: (self
- createUpdatingButtonWording: #debugWording
- action: #switchDebug
- help: 'Switch the debug flag')."
- toolbar addTransparentSpacerOfSize: 5 @ 0.
- ""
- toolbar
- addMorphBack: (self
- createButtonLabel: 'new'
- action: #newTranslations
- help: 'Create translations for new language.').
- toolbar
- addMorphBack: (self
- createButtonLabel: 'save'
- action: #saveToFile
- help: 'Save the translations to a file').
- toolbar
- addMorphBack: (self
- createButtonLabel: 'load'
- action: #loadFromFile
- help: 'Load the translations from a file').
- toolbar
- addMorphBack: (self
- createButtonLabel: 'merge'
- action: #mergeFromFile
- help: 'Merge the current translations with the translations in a file').
- ""
- toolbar addTransparentSpacerOfSize: 5 @ 0.
- toolbar
- addMorphBack: (self
- createButtonLabel: 'apply'
- action: #applyTranslations
- help: 'Apply the translations as much as possible.').
- ""
- toolbar addTransparentSpacerOfSize: 5 @ 0.
- toolbar
- addMorphBack: (self
- createButtonLabel: 'check translations'
- action: #check
- help: 'Check the translations and report the results.').
- toolbar
- addMorphBack: (self
- createButtonLabel: 'report'
- action: #report
- help: 'Create a report.').
- toolbar
- addMorphBack: (self
- createButtonLabel: 'gettext'
- action: #getText
- help: 'Interface with gettext.').
- ""
- ^ toolbar!
Item was removed:
- ----- Method: LanguageEditor>>untranslatedFilterWording (in category 'gui methods') -----
- untranslatedFilterWording
- ^ self untranslatedFilter isEmpty
- ifTrue: ['filter' translated]
- ifFalse: ['filtering: {1}' translated format: {self untranslatedFilter}]!
Item was removed:
- ----- Method: GetTextInterchange>>language: (in category 'accessing') -----
- language: translator
- language _ translator!
Item was removed:
- ----- Method: TranslatedReceiverFinder>>stringReceiversWithContext (in category 'accessing') -----
- stringReceiversWithContext
- | mrs results rr cls mn t o |
- mrs _ SystemNavigation default allCallsOn: #translated.
- results _ OrderedCollection new.
- mrs do: [:mr |
- rr _ OrderedCollection new.
- cls _ Smalltalk at: mr classSymbol.
- rr add: cls category.
- rr add: mr classSymbol.
- rr add: mr methodSymbol.
- mr classIsMeta ifTrue: [
- mn _ cls class decompile: mr methodSymbol.
- ] ifFalse: [
- mn _ cls decompile: mr methodSymbol.
- ].
- o _ OrderedCollection new.
- t _ Set new.
- self searchMessageNode: mn addTo: t.
- t do: [ :te |
- (te receiver isMemberOf: LiteralNode) ifTrue: [
- o add: te receiver key.
- ].
- ].
- o ifNotEmpty: [
- rr add: o.
- results add: rr.
- ].
- ].
- ^ results.
-
- !
Item was removed:
- ----- Method: GetTextImporter>>appendId: (in category 'parsing') -----
- appendId: aString
- msgId := msgId , aString!
Item was removed:
- ----- Method: LanguageEditor>>printUntranslatedReportOn: (in category 'reporting') -----
- printUntranslatedReportOn: aStream
- "append to aStream a report of the receiver's translations"
- aStream nextPutAll: '!!';
- nextPutAll: 'not translated' translated;
- cr.
-
- self untranslated asSortedCollection
- do: [:each |
- aStream
- nextPutAll: ('|{1}|' format: {self asHtml: each});
- cr].
-
- aStream cr; cr!
Item was removed:
- ----- Method: LanguageEditor>>status (in category 'gui methods') -----
- status
- "answer a status string"
- | translationsSize untranslatedSize |
- translationsSize := self translator translations size.
- untranslatedSize := self translator untranslated size.
- ^ '| {1} phrases | {2} translated | {3} untranslated |' translated format: {translationsSize + untranslatedSize. translationsSize. untranslatedSize}!
Item was removed:
- ----- Method: GetTextExporter2>>exportRecordHeader: (in category 'private') -----
- exportRecordHeader: context
- stream
- nextPutAll: '#: ';
- nextPutAll: context;
- cr.!
Item was removed:
- ----- Method: LanguageEditor>>refreshUntranslated (in category 'updating') -----
- refreshUntranslated
- "refresh the untranslated panel"
- self refreshTranslations.
- self selectedUntranslated: 0.
- untranslated := nil.
- self changed: #untranslated.
- !
Item was removed:
- ----- Method: LanguageEditor>>newTranslations (in category 'gui methods') -----
- newTranslations
- "private - try to apply the translations as much as possible all
- over the image"
- | result newID |
- result := FillInTheBlank request: 'New locale ID string?' translated initialAnswer: Locale current determineLocaleID isoString.
- result isEmpty
- ifTrue: ["Do nothing"
- ^ self].
- newID := LocaleID isoString: result.
- InternalTranslator
- newLocaleID: (LocaleID isoString: result).
- self class openOn: newID!
Item was removed:
- ----- Method: GetTextExporter2 classSide>>listAllHelp (in category 'utilities') -----
- listAllHelp
- "self listAllHelp"
- | spec specs oCatalog flap flapSelectors allKeys oCatalogHelp flapHelp |
- oCatalog := Dictionary new.
- Morph withAllSubclasses
- do: [:aClass | (aClass class includesSelector: #descriptionForPartsBin)
- ifTrue: [spec := aClass descriptionForPartsBin.
- oCatalog at: spec formalName put: spec documentation]].
- Morph withAllSubclasses
- do: [:aClass | (aClass class includesSelector: #supplementaryPartsDescriptions)
- ifTrue: [specs := aClass supplementaryPartsDescriptions.
- specs
- do: [:each | oCatalog at: each formalName put: each documentation]]].
- flap := Dictionary new.
- flapSelectors := #(#defaultsQuadsDefiningPlugInSuppliesFlap #defaultsQuadsDefiningStackToolsFlap #defaultsQuadsDefiningSuppliesFlap #defaultsQuadsDefiningToolsFlap #defaultsQuadsDefiningWidgetsFlap #defaultsQuadsDefiningScriptingFlap ).
- flapSelectors
- do: [:selector |
- specs := Flaps perform: selector.
- specs
- do: [:each | flap at: each third put: each fourth]].
- allKeys := oCatalog keys intersection: flap keys.
- allKeys asArray sort
- do: [:each |
- oCatalogHelp := oCatalog
- at: each
- ifAbsent: [''].
- flapHelp := flap
- at: each
- ifAbsent: [''].
- oCatalogHelp = flapHelp
- ifFalse: [Transcript cr; show: 'Name: ' , each.
- Transcript cr; show: 'O: ' , oCatalogHelp.
- Transcript cr; show: 'F: ' , flapHelp.
- Transcript cr.
-
- ]]!
Item was removed:
- ----- Method: LanguageEditor>>initializePanels (in category 'initialization') -----
- initializePanels
- "initialize the receiver's panels"
- translationsList := PluggableListMorphOfMany
- on: self
- list: #translations
- primarySelection: #selectedTranslation
- changePrimarySelection: #selectedTranslation:
- listSelection: #selectedTranslationsAt:
- changeListSelection: #selectedTranslationsAt:put:
- menu: #translationsMenu:
- keystroke: #translationsKeystroke:.
- translationsList setBalloonText: 'List of all the translated phrases.' translated.
- ""
- untranslatedList := PluggableListMorph
- on: self
- list: #untranslated
- selected: #selectedUntranslated
- changeSelected: #selectedUntranslated:
- menu: #untranslatedMenu:
- keystroke: #untranslatedKeystroke:.
- untranslatedList setBalloonText: 'List of all the untranslated phrases.' translated.
- ""
- translationText := PluggableTextMorph
- on: self
- text: #translation
- accept: #translation:
- readSelection: nil
- menu: nil.
- translationText setBalloonText: 'Translation for the selected phrase in the upper list.' translated.
- ""
- self
- addMorph: translationsList
- frame: (0 @ 0.18 corner: 0.5 @ 0.66).
- self
- addMorph: untranslatedList
- frame: (0.5 @ 0.18 corner: 1 @ 0.93).
- self
- addMorph: translationText
- frame: (0 @ 0.66 corner: 0.5 @ 0.93).
- self hResizing: #shrinkWrap!
Item was removed:
- ----- Method: LanguageEditor>>untranslated (in category 'accessing') -----
- untranslated
- "answer the translator's untranslated phrases"
-
-
- | all filterString |
- untranslated ifNotNil: [^ untranslated].
- all := self translator untranslated.
- ""
- filterString := self untranslatedFilter.
- ""
- filterString isEmpty
- ifFalse: [all := all
- select: [:each | ""
- ('*' , filterString , '*' match: each)
- or: ['*' , filterString , '*'
- match: (self translator translate: each)]]].
- ""
- ^ untranslated _ all asSortedCollection asArray!
Item was removed:
- ----- Method: LanguageEditor>>removeUntranslatedButUnusedStrings (in category 'stef') -----
- removeUntranslatedButUnusedStrings
- (self confirm: 'Are you sure that you want to remove unused strings?' translated)
- ifFalse: [^ self].
- untranslatedList getList
- do: [:each |
- | timesUsed |
- timesUsed := self numberOfTimesStringIsUsed: each.
- Transcript show: each.
- Transcript show: timesUsed printString;
- cr.
- timesUsed isZero
- ifTrue: [self translator removeUntranslated: each]].
-
- self refreshUntranslated.
- !
Item was removed:
- ----- Method: LanguageEditor class>>open (in category 'opening') -----
- open
- "open the receiver on any language"
- "
- LanguageEditor open.
- "
- | menu |
- menu := MenuMorph new defaultTarget: self.
- menu addTitle: 'Language Editor for...' translated.
- ""
- (InternalTranslator availableLanguageLocaleIDs
- asSortedCollection: [:x :y | x asString <= y asString])
- do: [:eachLanguage | ""
- menu
- add: eachLanguage name
- target: self
- selector: #openOn:
- argument: eachLanguage].
- ""
- menu popUpInWorld!
Item was removed:
- ----- Method: GetTextExporter>>exportTag:msg: (in category 'private') -----
- exportTag: tag msg: aString
- | pos end line |
- (aString indexOf: Character cr)
- = 0
- ifTrue: [self exportTag: tag singleLine: aString]
- ifFalse: [self exportTag: tag singleLine: ''.
- pos := 1.
- end := 0.
- [end < aString size]
- whileTrue: [end := aString indexOf: Character cr startingAt: pos.
- end = 0
- ifTrue: [end := aString size].
- line := aString copyFrom: pos to: end.
- stream nextPut: $";
-
- nextPutAll: (self formatString: line);
- nextPut: $";
- cr.
- pos := end + 1]]!
Item was removed:
- ----- Method: LanguageEditor>>printTranslationsReportOn: (in category 'reporting') -----
- printTranslationsReportOn: aStream
- "append to aStream a report of the receiver's translations"
- | originalPhrases |
- aStream nextPutAll: '!!';
- nextPutAll: 'translations' translated;
- cr.
-
- originalPhrases := self translator translations keys asSortedCollection.
-
- originalPhrases
- do: [:each |
- aStream
- nextPutAll: ('|{1}|{2}|' format: {self asHtml: each. self
- asHtml: (self translator translate: each)});
- cr].
-
- aStream cr; cr!
Item was removed:
- ----- Method: GetTextExporter2>>exportPhrase:translation: (in category 'private') -----
- exportPhrase: phraseString translation: translationString
- | normalizedTrans tmp transStartsWithCR transEndsWithCR|
- phraseString isEmpty
- ifTrue: [^ self].
- self exportTag: 'msgid' msg: phraseString.
- translationString size = 0 ifTrue: [
- normalizedTrans _ ''
- ] ifFalse: [
- transEndsWithCR _ translationString last = (Character cr).
- phraseString last = (Character cr) ifTrue: [
- transEndsWithCR ifTrue: [
- normalizedTrans _ translationString
- ] ifFalse: [
- normalizedTrans _ translationString , String cr
- ]
- ] ifFalse: [
- transEndsWithCR ifTrue: [
- normalizedTrans _ translationString allButLast
- ] ifFalse: [
- normalizedTrans _ translationString
- ]
- ].
- transStartsWithCR _ normalizedTrans first = (Character cr).
- phraseString first = (Character cr) ifTrue: [
- transStartsWithCR ifFalse: [
- tmp _ (Character cr asString) , normalizedTrans.
- normalizedTrans _ tmp.
- ]
- ] ifFalse: [
- transStartsWithCR ifTrue: [
- normalizedTrans _ normalizedTrans allButFirst
- ]
- ]
- ].
- self exportTag: 'msgstr' msg: normalizedTrans.
- stream cr!
Item was removed:
- ----- Method: LanguageEditor>>selectedUntranslated (in category 'accessing') -----
- selectedUntranslated
- "answer the selectedUntranslated"
- ^ selectedUntranslated!
Item was removed:
- ----- Method: LanguageEditor>>reportString (in category 'reporting') -----
- reportString
- "answer a string with a report of the receiver"
- | stream |
- stream := String new writeStream.
- self printReportOn: stream.
- ^ stream contents!
Item was removed:
- ----- Method: LanguageEditor>>translation (in category 'accessing') -----
- translation
- "answer the translation for the selected phrase"
- self selectedTranslation isZero
- ifTrue: [^ '<select a phrase from the upper list>' translated].
- ""
- ^ self translator
- translate: (self translations at: self selectedTranslation)!
Item was removed:
- ----- Method: LanguageEditor>>createRow (in category 'initialization - toolbar') -----
- createRow
- "create a row"
- | row |
- row := AlignmentMorph newRow.
- row layoutInset: 3;
- wrapCentering: #center;
- cellPositioning: #leftCenter.
- ""
- ^ row!
Item was removed:
- ----- Method: TranslatedReceiverFinder>>arraySearch:messageNode:addTo: (in category 'private') -----
- arraySearch: aSymbol messageNode: aParseNode addTo: aCollection
- "Find literals ahead of aSymbol from arrays in the method."
- "self new arraySearch: #hello messageNode: (self
- decompile: #arraySearch:messageNode:addTo:) addTo: Set new"
- self flag: #(#ignore #detected #hello ).
- ((aParseNode isMemberOf: LiteralNode)
- and: [aParseNode key isMemberOf: Array])
- ifTrue: [self
- arraySearch: aSymbol
- fromArray: aParseNode key
- addTo: aCollection].
- (aParseNode notNil
- and: [aParseNode isLeaf not])
- ifTrue: [aParseNode getAllChildren
- do: [:child | self
- arraySearch: aSymbol
- messageNode: child
- addTo: aCollection]].
- ^ aCollection!
Item was removed:
- ----- Method: LanguageEditor>>codeSelectedTranslation (in category 'gui methods') -----
- codeSelectedTranslation
- | keys code |
- keys := selectedTranslations
- collect: [:key | self translations at: key].
- code := String
- streamContents: [:aStream | self translator fileOutOn: aStream keys: keys withBOM: false].
- (StringHolder new contents: code)
- openLabel: 'exported codes' translated!
Item was removed:
- ----- Method: LanguageEditor>>resetNewerKeys (in category 'gui methods') -----
- resetNewerKeys
-
- self initializeNewerKeys.
- !
Item was removed:
- ----- Method: GetTextImporter>>storeTranslation (in category 'parsing') -----
- storeTranslation
- | key |
- key := self formatString: msgId.
- msgId isEmpty
- ifFalse: [InternalTranslator registerPhrase: key.
- msgStr isEmpty
- ifFalse: [language
- rawPhrase: key
- translation: (self formatString: msgStr)]].
- self initialize!
Item was removed:
- ----- Method: GetTextExporter>>formatString: (in category 'private') -----
- formatString: aString
- | result |
- result := aString.
- self formatReplacements
- do: [:each | result := result copyReplaceAll: each key with: each value].
- ^ result!
Item was removed:
- ----- Method: LanguageEditor>>selectedTranslation (in category 'accessing') -----
- selectedTranslation
- "answer the selectedTranslation"
- ^ selectedTranslation!
Item was removed:
- ----- Method: LanguageEditor>>searchUntranslated (in category 'gui methods') -----
- searchUntranslated
- | search |
- search := FillInTheBlank request: 'search for' translated initialAnswer: ''.
- (search isNil
- or: [search isEmpty])
- ifTrue: [""
- self beep.
- ^ self].
- ""
- self searchUntranslated: search!
Item was removed:
- ----- Method: LanguageEditor>>numberOfTimesStringIsUsed: (in category 'stef') -----
- numberOfTimesStringIsUsed: aString
-
- ^ (self systemNavigation allSelect: [:method | method
- hasLiteralSuchThat: [:lit | lit isString
- and: [lit includesSubstring: aString caseSensitive: true]]]) size!
Item was removed:
- ----- Method: GetTextExporter2>>createHeaders (in category 'private') -----
- createHeaders
- | headers |
- headers := OrderedCollection new.
- headers add: 'Project-Id-Version' -> 'eToys'.
- headers add: 'POT-Creation-Date' -> self currentDateAndTime.
- headers add: 'PO-Revision-Date' -> self currentDateAndTime.
- headers add: 'Last-Translator' -> ''.
- headers add: 'Language-Team' -> ''.
- headers add: 'MIME-Version' -> '1.0'.
- headers add: 'Content-Type' -> ('text/plain; charset=', stream converter class encodingNames first).
- headers add: 'Content-Transfer-Encoding' -> '8bit'.
- headers add: 'X-Etoys-SystemVersion' -> (SystemVersion current asString).
- ^ headers!
Item was removed:
- ----- Method: LanguageEditor>>filterTranslations (in category 'gui methods') -----
- filterTranslations
- | filter |
- filter := FillInTheBlank request: 'filter with
- (empty string means no-filtering)' translated initialAnswer: self translationsFilter.
- ""
- self filterTranslations: filter!
Item was removed:
- ----- Method: LanguageEditor>>untranslatedMenu: (in category 'gui methods') -----
- untranslatedMenu: aMenu
- ^ aMenu add: 'remove' translated action: #removeUntranslated;
- add: 'translate (t)' translated action: #translate;
- add: 'where (E)' translated action: #browseMethodsWithUntranslated;
- yourself!
Item was removed:
- ----- Method: TranslatedReceiverFinder>>stringReceiversWithContext: (in category 'accessing') -----
- stringReceiversWithContext: aSymbol
- "Find string receivers for a symbol.
- Answer a collection of aMethodReference -> {keyword. keyword...}"
- "self new stringReceiversWithContext: #translated"
- | keywords methodReferences |
- methodReferences _ SystemNavigation default allCallsOn: aSymbol.
- ^ methodReferences inject: OrderedCollection new into: [:list :next |
- keywords := self findWordsWith: aSymbol in: next.
- keywords
- ifNotEmpty: [list add: next -> keywords].
- list]
- !
Item was removed:
- ----- Method: GetTextExporter>>exportHeaderLineKey:value: (in category 'private-headers') -----
- exportHeaderLineKey: keyString value: valueString
- stream nextPut: $";
- nextPutAll: keyString;
- nextPut: $:;
- space;
- nextPutAll: valueString;
- nextPutAll: '\n';
- nextPut: $";
- cr!
Item was removed:
- GetTextInterchange subclass: #GetTextImporter
- instanceVariableNames: 'msgId msgStr state'
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Multilingual-Editor'!
-
- !GetTextImporter commentStamp: 'tak 10/24/2007 11:23' prior: 0!
- GetTextImporter load gettext po file into a InternalTranslator.
-
- GetTextImporter new importID: (LocaleID isoString: 'lang-name') fileNamed: 'lang.po'
- !
Item was removed:
- ----- Method: LanguageEditor>>printReportOn: (in category 'reporting') -----
- printReportOn: aStream
- "append to aStream a report of the receiver with swiki format"
- self printHeaderReportOn: aStream.
- self printUntranslatedReportOn: aStream.
- self printTranslationsReportOn: aStream!
Item was removed:
- ----- Method: GetTextExporter>>exportUntranslated (in category 'private-translations') -----
- exportUntranslated
- | keys |
- keys := language untranslated keys asArray sort.
- ProgressInitiationException
- display: 'Exporting untranslated phrases as a gettext file.'
- at: Sensor cursorPoint
- from: 1
- to: keys size
- during: [:bar | 1
- to: keys size
- do: [:index |
- self
- exportPhrase: (keys at: index)
- translation: ''.
- bar value: index]]!
Item was removed:
- ----- Method: GetTextExporter2>>appendVocabularies: (in category 'private') -----
- appendVocabularies: domains
- | literalsForDomain references domainName methodReference |
-
- EToyVocabulary allPhrasesWithContextToTranslate do: [ :r |
- methodReference := (MethodReference new setStandardClass: (r second) methodSymbol: (r third)).
- domainName _ self getTextDomainForPackage: (PackageOrganizer default packageOfMethod: methodReference).
- literalsForDomain _ domains at: domainName ifAbsentPut: [Dictionary new].
- r fourth do: [ :literal |
- references _ literalsForDomain at: literal ifAbsentPut: [OrderedCollection new].
- references add: methodReference.
- ].
- ].
- !
Item was removed:
- ----- Method: LanguageEditor>>translationsKeystroke: (in category 'gui methods') -----
- translationsKeystroke: aChar
- "Respond to a Command key in the translations list."
- aChar == $x
- ifTrue: [^ self removeTranslation].
- aChar == $E
- ifTrue: [^ self browseMethodsWithTranslation]!
Item was removed:
- ----- Method: GetTextExporter>>currentDateAndTime (in category 'private-headers') -----
- currentDateAndTime
- ^ String
- streamContents: [:aStream |
- aStream nextPutAll: Date today yyyymmdd;
- space.
- Time now
- print24: true
- showSeconds: false
- on: aStream.
- aStream nextPutAll: '-0000']!
Item was removed:
- ----- Method: LanguageEditor>>filterTranslations: (in category 'gui methods') -----
- filterTranslations: aString
- | filter |
- filter := aString ifNil:[''].
- ""
- translationsFilter _ filter.
- self refreshTranslations.
- !
Item was removed:
- ----- Method: LanguageEditor>>withUnboundModelDo: (in category 'private') -----
- withUnboundModelDo: aBlock
- "Private - Evaluate aBlock with the receiver temporary
- unbound from the model.
-
- Useful to perform a batch of modifications to the model
- without updating the view."
- | formerModel |
- formerModel := self model.
- self model: nil.
- [aBlock value: formerModel]
- ensure: [self model: formerModel]!
Item was removed:
- ----- Method: LanguageEditor class>>initialize (in category 'initialize-release') -----
- initialize
- "initialize the receiver"
- (TheWorldMenu respondsTo: #registerOpenCommand:)
- ifTrue: [""
- TheWorldMenu registerOpenCommand: {'Language Editor' translated. {self. #openOnDefault}}.
- TheWorldMenu registerOpenCommand: {'Language Editor for...' translated. {self. #open}}]!
Item was removed:
- ----- Method: GetTextExporter2>>exportInformation: (in category 'private') -----
- exportInformation: anOrderedCollection
- anOrderedCollection do: [:each |
- self exportRecordHeader: each second.
- self exportPhrase: each third translation: ''].
- stream cr.!
Item was removed:
- ----- Method: LanguageEditor>>selectTranslationPhrase: (in category 'gui methods') -----
- selectTranslationPhrase: phraseString
- self selectedTranslation: (self translations indexOf: phraseString)!
More information about the etoys-dev
mailing list