David T. Lewis uploaded a new version of Multilingual to project The Trunk:
http://source.squeak.org/trunk/Multilingual-dtl.67.mcz ==================== Summary ==================== Name: Multilingual-dtl.67 Author: dtl Time: 29 November 2009, 9:34:12 am UUID: 674101cf-1ac8-4cc7-9e61-257bbd794434 Ancestors: Multilingual-nice.66 Use Beeper class>>beep rather than deprecated Object>>beep =============== Diff against Multilingual-nice.66 =============== Item was changed: Object subclass: #LanguageEnvironment instanceVariableNames: 'id' classVariableNames: 'ClipboardInterpreterClass Current FileNameConverterClass InputInterpreterClass KnownEnvironments SystemConverterClass' poolDictionaries: '' category: 'Multilingual-Languages'! !LanguageEnvironment commentStamp: 'bf 8/16/2009 16:52' prior: 0! The name multilingualized Squeak suggests that you can use multiple language at one time. This is true, of course, but the system still how to manage the primary language; that provides the interpretation of data going out or coming in from outside world. It also provides how to render strings, as there rendering rule could be different in one language to another, even if the code points in a string is the same. Originally, LanguageEnvironment and its subclasses only has class side methods. After merged with Diego's Babel work, it now has instance side methods. Since this historical reason, the class side and instance side are not related well. + When we talk about the interface with the outside of the Squeak world, there are three different "channels"; the keyboard input, clipboard output and input, and filename. On a not-to-uncommon system such as a Unix system localized to Japan, all of these three can have (and does have) different encodings. So we need to manage them separately. Note that the encoding in a file can be anything. While it is nice to provide a suggested guess for this 'default system file content encoding', it is not critical. - When we talk about the interface with the outside of the Squeak world, there are three different "channels"; the keyboard input, clipboard output and input, and filename. On a not-to-uncommon system such as a Unix system localized to Japan, all of these three can have (and does have) different encodings. So we need to manage them separately. Note that the encoding in a file can be anything. While it is nice to provide a suggested guess for this 'default system file content encoding', it is not critical. Rendering support is limited basic L-to-R rendering so far. But you can provide different line-wrap rule, at least. ! Item was changed: ----- Method: LanguageEditor>>loadFromFile (in category 'gui methods') ----- loadFromFile | fileName | fileName := self selectTranslationFileName. fileName isNil ifTrue: ["" + Beeper beep. - self beep. ^ self]. "" Cursor wait showWhile: [ self translator loadFromFileNamed: fileName. self changed: #translations. self changed: #untranslated]! Item was changed: ----- 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 := (UIManager default chooseFrom: (results collect: [:each | each copy replaceAll: Character cr with: $\]) title: 'select the untranslated phrase...' translated). "" index isZero ifTrue: ["" + Beeper beep. - self beep. ^ self]. "" self selectUntranslatedPhrase: (results at: index)! Item was changed: ----- Method: LanguageEditor>>saveToFile (in category 'gui methods') ----- saveToFile "save the translator to a file" | fileName | fileName := UIManager default request: 'file name' translated initialAnswer: translator localeID isoString , '.translation'. (fileName isNil or: [fileName isEmpty]) ifTrue: ["" + Beeper beep. - self beep. ^ self]. "" Cursor wait showWhile: [ self translator saveToFileNamed: fileName]! Item was changed: ----- Method: LanguageEditor>>searchUntranslated (in category 'gui methods') ----- searchUntranslated | search | search := UIManager default request: 'search for' translated initialAnswer: ''. (search isNil or: [search isEmpty]) ifTrue: ["" + Beeper beep. - self beep. ^ self]. "" self searchUntranslated: search! Item was changed: ----- Method: LanguageEditor>>removeTranslation (in category 'gui methods') ----- removeTranslation "remove the selected translation" | translation | self selectedTranslation isZero ifTrue: ["" + Beeper beep. - 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 changed: #translations. self changed: #untranslated.! Item was changed: ----- Method: LanguageEditor>>searchTranslation (in category 'gui methods') ----- searchTranslation | search | search := UIManager default request: 'search for' translated initialAnswer: ''. (search isNil or: [search isEmpty]) ifTrue: ["" + Beeper beep. - self beep. ^ self]. "" self searchTranslation: search! Item was changed: ----- Method: LanguageEditor>>addTranslation (in category 'gui methods') ----- addTranslation "translate a phrase" | phrase | phrase := UIManager default request: 'enter the original:' initialAnswer: ''. (phrase isNil or: [phrase = '']) ifTrue: ["" + Beeper beep. - self beep. ^ self]. "" self translatePhrase: phrase! Item was changed: ----- Method: LanguageEditor>>removeUntranslated (in category 'gui methods') ----- removeUntranslated "remove the selected untranslated phrase" | untranslated | self selectedUntranslated isZero ifTrue: ["" + Beeper beep. - self beep. self inform: 'select the untranslated phrase to remove' translated. ^ self]. "" untranslated := self untranslated at: self selectedUntranslated. "" (self confirm: ('Removing "{1}". Are you sure you want to do this?' translated format: {untranslated})) ifFalse: [^ self]. "" self translator removeUntranslated: untranslated! Item was changed: ----- Method: LanguageEditor>>translate (in category 'gui methods') ----- translate "translate a phrase" | phrase | phrase := self phraseToTranslate. "" (phrase isNil or: [phrase = '']) ifTrue: ["" + Beeper beep. - self beep. ^ self]. "" self translatePhrase: phrase! Item was changed: ----- Method: LanguageEditor>>searchTranslation: (in category 'gui methods') ----- searchTranslation: aString | translations results index | translations := self translations. results := translations select: [:each | "" ('*' , aString , '*' match: each) or: ['*' , aString , '*' match: (self translator translationFor: each)]]. "" results isEmpty ifTrue: ["" self inform: 'no matches for' translated , ' ''' , aString , ''''. ^ self]. "" results size = 1 ifTrue: ["" self selectTranslationPhrase: results first. ^ self]. "" index := (UIManager default chooseFrom: (results collect: [:each | "" (each copy replaceAll: Character cr with: $\) , ' -> ' , ((self translator translationFor: each) copy replaceAll: Character cr with: $\)]) title: 'select the translation...' translated). "" index isZero ifTrue: ["" + Beeper beep. - self beep. ^ self]. "" self selectTranslationPhrase: (results at: index)! Item was changed: ----- Method: LanguageEditor>>mergeFromFile (in category 'gui methods') ----- mergeFromFile | fileName | fileName := self selectTranslationFileName. fileName isNil ifTrue: ["" + Beeper beep. - self beep. ^ self]. "" Cursor wait showWhile: [ self translator loadFromFileNamed: fileName. self changed: #translations. self changed: #untranslated]! Item was changed: ----- Method: LanguageEditor>>translatePhrase: (in category 'gui methods') ----- translatePhrase: aString "translate aString" | translation | translation := UIManager default multiLineRequest: 'translation for: ' translated , '''' , aString , '''' centerAt: Sensor cursorPoint initialAnswer: aString answerHeight: 200. "" (translation isNil or: [translation = '']) ifTrue: ["" + Beeper beep. - self beep. ^ self]. "" self phrase: aString translation: translation! Item was changed: ----- Method: LanguageEditor>>browseMethodsWithTranslation (in category 'gui methods') ----- browseMethodsWithTranslation | translation | self selectedTranslation isZero ifTrue: ["" + Beeper beep. - self beep. self inform: 'select the translation to look for' translated. ^ self]. "" translation := self translations at: self selectedTranslation. self systemNavigation browseMethodsWithLiteral: translation! Item was changed: ----- Method: LanguageEditor>>browseMethodsWithUntranslated (in category 'gui methods') ----- browseMethodsWithUntranslated | untranslated | self selectedUntranslated isZero ifTrue: ["" + Beeper beep. - self beep. self inform: 'select the untranslated phrase to look for' translated. ^ self]. "" untranslated := self untranslated at: self selectedUntranslated. SystemNavigation default browseMethodsWithLiteral: untranslated. ! |
Free forum by Nabble | Edit this page |